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 |
//Листинг #1.1 Константные методы класса clang #include <iostream> using namespace std; class MyClass{ int x; public: void print() const{ //константный метод класса cout << "x == " << x << '\n'; } void set_x(int value){ x = value; } }; int main () { MyClass obj; obj.set_x(100); //Записываем значение в x вовнутрь класса obj.print(); //выводим записанное в x класса значение на экран } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//Листинг #1.2 Константные методы класса clang #include <iostream> using namespace std; class MyClass{ int x; public: void print() const{ //потому что const cout << "x == " << x << '\n'; x = 100; //Ошибка компиляции } }; int main () { MyClass obj; obj.print(); } |
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 |
//Листинг 2 использование mutable clang //Листинг #1 Константные методы класса clang #include <iostream> using namespace std; class MyClass{ int x; mutable int count; //переменная count имеет тип int и защищена от навешивания константности константными методами public: void print() const{ cout << count << ": "; cout << "x == " << x << '\n'; count++; } void set_x(int value){ x = value; } void set_count(int value){ count = value; } void numbers_print_call() const{ cout << "print was call "; //Функция print вызывалась cout << count << '\n'; //count count++; } }; int main () { MyClass obj; obj.set_x(20); obj.set_count(0); obj.print(); //вызываем один из методов класса несколько раз obj.print(); obj.print(); obj.print(); obj.numbers_print_call(); //выводим число вызовов } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//Листинг #3.1 Константные объекты класса clang #include <iostream> #include <string.h> using namespace std; class MyClass{ char Caption[256]; public: MyClass(const char* name){ strcpy(Caption, name); } }; int main () { const MyClass obj1("Nikolay"); //Константный объект obj1 const MyClass obj2("Wasia"); //Константный объект obj2 } |
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.2 Константные объекты класса clang #include <iostream> #include <string.h> using namespace std; class MyClass{ char Caption[256]; public: MyClass(const char* name){ strcpy(Caption, name); } /*ФУНКЦИЯ ВЫВОДА ЗНАЧЕНИЯ ОДНОГО ИЗ ДАННЫХ КЛАССА*/ void print() const{ //Метод сделали константным cout << Caption << '\n'; } }; int main () { const MyClass obj1("Nikolay"); //Константный объект obj1 obj1.print(); //У константного объекта вызывается константный метод. Всё работает } |
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 |
//Листинг #4.1 clang #include <iostream> using namespace std; class MyClass{ char x; //Обычное данное mutable char y; //мутабельное данное static char z; //статическое данное public: MyClass():x('x'),y('y'){} //конструктор по умолчанию void print(){ x--; //Изменяем y--; z--; cout << "x == " << x << '\n'; //выводим на экран cout << "y == " << y << '\n'; cout << "z == " << z << '\n'; } }; char MyClass::z = 'z'; //Записали значение в статическую переменную 'z' int main () { MyClass obj; obj.print(); } |
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 |
//Листинг #4.2 clang #include <iostream> using namespace std; class MyClass{ char x; //Обычное данное mutable char y; //мутабельное данное static char z; //статическое данное public: MyClass():x('x'),y('y'){} //конструктор поумолчанию void print() const{ // x--; //Поскольку не static и не mutable, а объект константный, так делать нельзя, обычные переменные изменениям не подлежат y--; z--; cout << "x == " << x << '\n'; //выводим на экран cout << "y == " << y << '\n'; cout << "z == " << z << '\n'; } }; char MyClass::z = 'z'; //Записали значение в статическую переменную 'z' int main () { const MyClass obj; obj.print(); //Хоть объект и константный, частично он будет изменён } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//Листинг #5.1 clang #include <iostream.h> #include <conio.h> class MyClass{ const int x; public: MyClass():x(100){} void print() const{ cout << x << '\n'; } }; int main () { clrscr(); const MyClass obj; obj.print(); //Хоть объект и константный, частично он будет изменён cin.get(); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//Листинг #5.2 clang #include <iostream> using namespace std; class MyClass{ const int x = 100; public: void print() const{ cout << x << '\n'; } }; int main () { const MyClass obj; obj.print(); //Хоть объект и константный, частично он будет изменён } |
Добавить комментарий