
- •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));
15.Статические переменные-члены и функции-члены класса.
До сего момента считалось, что поля в каждом объекте являются собственностью именно этого объекта и не используются другими объектами этого класса. Например, если записать определение avtoa,b,c; то это означает, что в памяти создаются три объекта. Если возникает необходимость вывести значение поля rashod объекта b, то необходимо указать имя этого объекта и через точку записать имя метода GetRashod(), т.е. b.GetRashod().
Однако внутри класса программист имеет возможность определять так называемые статические переменные-члены, которые определяются для всего класса, а не для каждого отдельного экземпляра класса. При этом в любой момент объекты класса имеют возможность обращаться к этим данным. Через использование статических элементов можно, например, накапливать некоторую информацию по объектам класса.
1. #include<iostream>
2. usingnamespace std;
3. class avto {
4. public:
5. avto(): cena(8500), rashod(7.2)
6. { SumCena=SumCena+cena; name="Lada";} // 1-йконструктор
7. avto(int p): cena(p), rashod(8.5)
8. { SumCena=SumCena+cena; name="Niva";} // 2-йконструктор
9. avto(int p, int c) : cena(p+p*c/100), rashod(6.5)
{ SumCena=SumCena+cena; name="Fiat";} // 3-йконструктор
10. void SetRashod(double rashod1) {rashod=rashod1;}
11. int GetCena() const {return cena;}
12. char* GetName() {return name;}
13. double GetRashod() const {return rashod;}
14. void Output() { cout << name <<" "<< cena <<" "
15. << rashod << endl; }
16. staticint SumCena;
17. private:
18. char* name;
19. int cena;
20. double rashod;
21. };
22. int avto::SumCena = 0;
23. int main()
24. { avto a[4] = {avto(14500,10), avto(), avto(18500), avto()};
25. cout <<"RAZMER MASSIVA = "<<sizeof(a) << endl
26. <<"RAZMER ELEMENTA MASSIVA = "<<sizeof(a[0]) << endl;
27. a[0].Output();
28. a[1].Output();
29. a[2].Output();
30. a[3].Output();
31. cout <<"TOTAL: "<< avto::SumCena << endl;
32. return 0;
33. }
В 16 строке объявляется статическая переменная-членSumCena(типа public)классаavto. В 22 строке эта переменная инициализируется нулем. В каждом из трех конструкторах предусматривается накопление значения этой переменной. В 31 строке продемонстрирован механизм обращения к статической переменной SumCena.
Статическую переменную-член класса можно объявлять и в разделе private (см. 19 строку в программе ниже). В этом случае необходимо предусмотреть статическую функцию-член класса, которая обеспечивает доступ к такой переменной. В 17 строке определена такая статическая функция-член класса avto. В 33 строке продемонстрирован механизм обращения к этой функции, когда указывается имя класса и далее имя функции.
1. #include<iostream>
2. usingnamespace std;
3. class avto {
4. public:
5. avto(): cena(8500), rashod(7.2)
6. { SumCena=SumCena+cena; name="Lada";} // 1-йконструктор
7. avto(int p): cena(p), rashod(8.5)
8. { SumCena=SumCena+cena; name="Niva";} // 2-йконструктор
9. avto(int p, int c) : cena(p+p*c/100), rashod(6.5)
10. { SumCena=SumCena+cena; name="Fiat";} // 3-йконструктор
11. void SetRashod(double rashod1) {rashod=rashod1;}
12. int GetCena() const {return cena;}
13. char* GetName() const {return name;}
14. double GetRashod() const {return rashod;}
15. void Output() { cout << name <<" "<< cena <<" "
16. << rashod << endl; }