- •1.Краткий обзор агрегатного типа struct.
- •Intcena;
- •Int main()
- •Int cena;
- •Void vyvod(avto s)
- •Int main()
- •3.Понятие объединения union.
- •Void vyvod(avto s, int I)
- •Int main()
- •Intcena;
- •Int main()
- •Int cena;
- •Intmain()
- •Void reset(); …
- •Void Demo::reset() // определениефункции reset( )
- •9.Пример реализации класса для организации обработки символьной строки.
- •Int demochar::length()
- •Int main()
- •10.Пример реализации класса для организации обработки одномерного массива целочисленных значений.
- •11.Инициализация объектов.
- •Int main()
- •12Указатель this.
- •13.Постоянные функции-члены класса.
- •3. Class avto {
- •15. Int main()
- •14.Массив объектов.
- •3. Class avto {
- •24. Int main() {
- •15.Статические переменные-члены и функции-члены класса.
- •17. Staticint GetSumCena() { return SumCena; };
- •19. Staticint SumCena;
- •16 Дружественные функции.
- •8. Friendvoid GetFields(avto&);
- •17 Класс, содержащий переменную-член типа класс.
- •3. Class Date_Avto {
- •16. Class avto {
- •30. Int main()
- •18 Сложность больших программных систем.
- •19 Пять признаков сложной системы.
- •20 Роль декомпозиции, абстракции, иерархии при построении сложных систем.
- •21 Объектная модель.
- •Ood основывается на объектно-ориентированной декомпозиции;
- •25Пример программы с наследованием классов.
- •3. Class avto {
- •18. Class gruz_avto : public avto {
- •36. Int main(){
- •26 Переопределение функций-членов внутри производного класса.
- •3. Class avto {
- •18. Class gruz_avto : public avto {
- •30. Int main()
- •5.Classint_Matrix// класс для обработки целочисленной матрицы
- •45. Int main()
- •Int main()
- •2. Usingnamespace std;
- •3. Int main()
- •18. Return 0;
- •Int main()
- •20. F.Write((char*)&s,sizeof(s));
- •7. Intcena;
- •21. F.Write((char*)&s,sizeof(s)); };
- •22. F.Close();
- •25. F.Seekg(sizeof(s), ios_base::beg);
- •26. F.Read((char*)&s,sizeof(s));
11.Инициализация объектов.
Ранее было показано, что в языке С++ значения переменных-членов класса можно непосредственно определять в теле явного конструктора. На самом же деле механизм вызова конструктора реализован в два этапа:
инициализация; 2) вызов тела конструктора.
Значения переменным-членамкласса можно задавать как на этапе инициализации, так и внутри тела конструктора. Отметим, что часто логически правильнее устанавливать значения переменных-членов на этапе инициализации. В этом случае записывается имя конструктора, в круглых скобках при необходимости указывается список параметров, затем после закрывающей круглой скобки ставится двоеточие, далее идет список инициализации, в котором элементы отделяются запятыми, а потом в фигурных скобках размещается тело конструктора.
#include<iostream>
usingnamespace std;
class avto {
public:
avto(): cena(18500),
rashod(7.2) { name="FORD";} // 1-йконструктор
avto(int p): cena(p),
rashod(8.5) {name="OPEL";} // 2-йконструктор
avto(int p, int c) : cena(p+p*c/100),
rashod(6.5) {name="SKODA";} // 3-йконструктор
~avto(){cout <<"Object destroy!!!"<< endl;} // деструктор
void Output() { cout << name << endl << cena << endl
<< rashod << endl; }
private: char* name;
int cena;
double rashod;
};
Int main()
{ avto A; A.Output();
cout << " ***** " << endl;
avto B(19500); B.Output();
cout << " ***** " << endl;
A=avto(15000,10); A.Output();
return 0;
}
Во всех 3 явных конструкторах значения полей cena и rashod определяются в инициализирующей части, а значение поля name – в теле конструктора.
12Указатель this.
Каждый объект класса содержит свой индивидуальный экземпляр полей класса. Методы же одного класса размещаются в памяти в единственном экземпляре и используются всеми соответствующими объектами совместно.
Поэтому реализован механизм, который обеспечивает работу методов нестатических экземпляров именно того объекта, для которого они были вызваны. Для этого в каждый нестатический метод автоматически передается скрытый указатель this, в котором хранится ссылка на вызвавший функцию экземпляр.
1. #include<iostream>
2. usingnamespace std;
3. class avto {
4. public: avto(): cena(19700),
5. rashod(5.7) { name="Honda"; }; //конструктор
6. ~avto() { cout <<"Object AVTO destroy!!! "<<this
7.<<" "<<sizeof(avto) << endl;} //деструктор
8. void SetRashod(double rashod) { this->rashod = rashod; }
9. void Output() { cout << "CENA -> "<< cena << endl <<
10."MARKA -> "<< name << endl <<
11."RASHOD ->"<< rashod << endl;}
12. private: char* name;
13. int cena;
14. double rashod; };
16. int main()
17. { avto A;
18. A.SetRashod(7.1);
19. A.Output();
20. avto C;
21. C.Output();
22.return 0; }
В строках 3-15 включительно определяется класс avto. В строках 6-7 приводится определение явного деструктора, внутри которого с помощью указателя this на экран выводится адрес соответствующего объекта (в одном случае объекта A, а в другом случае – объекта C). В 8 строке определяется нестатический метод SetRashod(), в котором продемонстрировано как с помощью указателя this удается одновременно использовать одноименное поле класса и параметр метода.