Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shprora_po_proge.docx
Скачиваний:
5
Добавлен:
23.09.2019
Размер:
518.78 Кб
Скачать

25Пример программы с наследованием классов.

Рассмотрим пример, в котором демонстрируется работа механизма наследования классов в языке С++:

1. #include<iostream>

2. usingnamespace std;

3. Class avto {

4. public:

5. avto();

6. ~avto();

7. void setname(char* name1){ name=name1;}

8. void setcena(int cena1) {cena=cena1;}

9. void setrashod(double rashod1) {rashod=rashod1;}

10. int getcena() {return cena;}

11. char* getname() {return name;}

12. double getrashod() {return rashod;}

13. protected:

14. char* name;

15. int cena;

16. double rashod;

17. };

18. Class gruz_avto : public avto {

19. public:

20. gruz_avto();

21. ~gruz_avto();

22. void setgruzopodemnost(double grpodemn1)

23. {grpodemn=grpodemn1;}

24. double getgruzopodemnost() {return grpodemn;}

25. private:

26. double grpodemn;

27. };

28. avto::avto() {cena=27500; name="MAZ"; rashod=18.5;

29. cout <<"Class avto !!!"<< endl;};

30. avto::~avto(){

31. cout <<"Object avto-class destroy! Address of name_avto is "

32. <<&name <<" RASHOD "<< rashod << endl;};

33. gruz_avto::gruz_avto(){grpodemn=15.6; rashod=16.5;

34. cout <<"Class gruz_avto !!!"<< endl;}

35. gruz_avto::~gruz_avto()

{cout <<"Object gruz_avo-class destroy!"<< endl;}

36. Int main(){

37. char navto[20];

38. cout <<"Input marka avto : "; cin >> navto;

39. avto a;

40. a.setname(navto); a.setrashod(11.5);

41. cout << a.getcena() << endl << a.getname() << endl

42. << a.getrashod()<< endl;

43. gruz_avto c;

44. c.setcena(23500);

45. cout << c.getcena() << endl << c.getname() << endl

46. << c.getrashod() << endl << c.getgruzopodemnost() << endl;

47. return 0;

48. }

В строках с 3 по 17 включительно размещается объявление класса avto, который в дальнейшем используется в качестве базового класса при объявлении класса gruz_avto. Отметим, что при объявлении класса avto предусмотрено объявление явного конструктора (см. 5 стр.) и явного деструктора (см. 6 стр.), которые соответственно определяются в 28-32 строках включительно.

В строках с 18 по 27 включительно представлено объявление производного класса gruz_avto, внутри которого объявляются явный конструктор (см. 20 стр.) и явный деструктор (см. 21 стр.).

В строках с 36 по 48 приведено описание функции main(). В начале ее выполнения предусматривается запрос на ввод наименования марки автомобиля. Далее в 39 строке определяется объект a класса avto, а в 40 строке методом setname() это имя заносится в поле name объекта a. При определении объектаа запускаются автоматически сначала неявный конструктор, а затем явный конструктор, который определен в 28-29 строках. В строках 41-42 предусмотрен вывод значений полей объекта а.

В строке 43 определяется объект c и при этом сначала запускаются конструкторы (неявный + явный) базового класса avto, а затем неявный + явный конструкторы производного класса gruz_avto, а потому на экране появятся соответствующие сообщения (см. 29 и 34 строки).

В конце выполнения программы будут автоматически вызываться деструкторы, причем для объекта c вначале вызываются явный + неявный деструкторы производного класса gruz_avto, а потом явный + неявный деструкторы базового класса avto.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]