1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//Листинг #1.1 Сумма двух значений Visual Studio #include <iostream> using std::cin; using std::cout; class MyClass { int x, y; public: int sum(int x, int y) { return x + y; //отдаём сумму, типом суммы будет целое int } }; int main() { MyClass object; cout << object.sum(15, 8) << '\n'; //15 + 8 = 23, это и выводится на экран, как и должно быть. Всё правильно std::cin.get(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//Листинг #1.2 Сумма двух значений Visual Studio #include <iostream> using std::cin; using std::cout; class MyClass { int x, y; public: double sum(double x, double y) { //поменяли все int на double, чтобы наверняка! return x + y; } }; int main() { MyClass object; cout << object.sum(15.3, 8) << '\n'; //15.3 + 8 = 23.3, это и выводится на экран, как и должно быть. Всё правильно std::cin.get(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
//Листинг #1.3 Сумма двух объектов #include <iostream> #include <string> using std::cin; using std::cout; using std::string; class MyClass { int x, y; public: double sum(double x, double y) { return x + y; } string sum(string x, string y) { //сделали перегрузку функции sum return x + y; } }; int main() { MyClass object; cout << object.sum(15.3, 8) << '\n'; //15.3 + 8 = 23.3, это и выводится на экран, как и должно быть. Всё правильно cout << object.sum("Hello, ", "world!") << '\n'; //Объединили строки путём сложения std::cin.get(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//Листинг #2 #include <iostream> #include <string> using std::cin; using std::cout; using std::string; class MyClass { int x, y; public: template <typename T> T sum(T x, T y) { return x + y; } }; int main() { MyClass object; cout << object.sum<double>(15.3, 8) << '\n'; //15.3 + 8 = 23.3, это и выводится на экран, как и должно быть. Всё правильно cout << object.sum<string>("Hello, ", "world!") << '\n'; //Объединили строки путём сложения std::cin.get(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
//Листинг #3 Шаблонный класс #include <iostream> #include <string> using std::cin; using std::cout; using std::string; template <typename T> class MyClass { int x, y; public: T sum(T x, T y) { return x + y; } }; int main() { MyClass<double> object_double; MyClass<string> object_string; cout << object_double.sum(35.3, 88.2) << '\n'; //35.3 + 88.2 = 123.5 cout << object_string.sum("Hello ", "world!") << '\n'; //ОК, сложили строки std::cin.get(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
//Листинг #4 #include <iostream> #include <string> using std::cerr; using std::cin; using std::cout; using std::string; template <typename T> class MyArray { public: enum {N = 10}; //Массив в 10 элементов void add(const T value, const int index); //В параметре используем подставляемый объектом тип void print(); private: int cursor = 0; //позиция в массиве T arr[N]; //Массив, тип которого определяется объектом класса, подставляется в класс и приходит сюда как T }; /*ФУНКЦИЯ ДОБАВЛЕНИЯ ЭЛЕМЕНТА В МАССИВ*/ template <typename T> void MyArray<T>::add(const T value, const int index) { cursor = index; if (cursor <0 || cursor >= N) { cerr << "index " << cursor << " invalid, cancel\n"; //Сообщаем о нарушении границы и об отмене операции return; } arr[cursor] = value; //Если позиция вставки легальна для массива arr, то записываем туда значение } /*ФУНКЦИЯ ВЫВОДА МАССИВА НА ЭКРАН*/ template <typename T> void MyArray<T>::print() { for (int i = 0; i < N; i++) { cout << '{' << arr[i] << "}\t"; } } int main() { string S[10] = { //Элементы этого массива будут использованы для записи в массив нашего класса "Hello", "World", "How", "my name Wasa", "Algebra, Geometry, Rus language" }; MyArray<int> int_arr; MyArray<string> string_arr; //Заполняем численный массив значениями по порядку for (int i = 0; i < 20; i++) { //Предположительно, мы ошиблись и вышли за пределы массива int_arr.add(i, i); //Добавляем значения } /////////////////////////////////////////// //Заполняем строковой массив строками. Можно посредством клавиатуры, но мне удобнее немного автоматизировать, поэтому из существующего массива for (int i = 0; i < sizeof(S) / sizeof(string); i++) { string_arr.add(S[i], i); //Заполняем } cout << "\n\noutput block\n"; //Начинаем выводить информацию (почто чтобы было видно, что вывод начался) cout << "int_arr:\n"; int_arr.print(); //выводим массив целых чисел cout << "\nstring_array:\n"; string_arr.print(); //выводим массив строк cin.get(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
template <typename T_class> class MyClass { template <typename T_fooparam> T_class foo(T_fooparam); }; template <typename T_class> //Шаблон класса template <typename T_fooparam> //Шаблон функции T_class MyClass<T_class>::foo(T_fooparam fooparam) { return T_class(); //сейчас это просто возвращение какого-нибудь объекта, неважно какого } int main() { } |
👿 👿 👿 👿
Всем привет!
Запятые исправьте. Мозг выворачивает.
Все хорошо только ссылку на константу в visual studio не получается сделать. Может другие компиляторах это разрешено .
Как Вы пытаетесь? Я не могу или помочь, или подсказать, или адекватно ответить, не зная, как Вами испробовалось.
КОНСТРУКТОР ГДЕ?
Вызывается неявно.