Конструкторы производного типа



При порождении производного класса из базового, имеющего конструктор, конструктор базового типа необходимо вызывать из конструктора производного класса. Конструкторы не наследуются, поэтому производный класс должен иметь собственные конструкторы. Если в конструкторе производного класса явный вызов конструктора базового типа отсутствует, то он вызывается автоматически без параметров. В случае нескольких уровней наследования конструкторы вызываются, начиная с верхнего уровня. В случае нескольких базовых типов их конструкторы вызываются в порядке объявления.

Опережающее описание класса

Если в описании класса есть ссылка на описываемый позже класс, то его надо просто объявить с помощью оператора class new_class;

Это описание аналогично описанию прототипов функции.

Виртуальные методы

Зачастую при наследовании появляются методы, которые в различных производных классах работают по различным алгоритмам, но имеют одинаковые выходные параметры и возвращаемое значение. Такие методы называются виртуальными и описываются с помощью служебного слова virtual. В качестве примера приведем абстрактный класс figure (фигура), на базе которого можно построить классы окружность, прямоугольник, квадрат, треугольник, ромб, квадрат, эллипс. На листинге приведены классы окружность и прямоугольник.
#include <iostream.h>

#include <math.h>

#define PI 3.14159

class figure

{
public:

int n;

float *p;

figure();

float perimetr();


virtual float square();

virtual void show_parametri();

};
figure::figure()

{

cout<<"This is abstract constructor"<<endl;

}

 

float figure::perimetr()

{
int i;

float psum;

for(psum=0,i=0;i<n;psum+=p[i],i++);

return psum;


}
float figure::square()

{
cout<<"No square abstract figure"<<endl;

return 0;

}
void figure::show_parametri()

{
cout<<"Abstract figure";

}
class _circle:public figure

{
public:

_circle(); float perimetr();

virtual float square();

virtual void show_parametri();

};
class RecTangle:public figure

{
public:

RecTangle();

virtual float square();

virtual void show_parametri();

};
void main()

{
_circle RR;

RR.show_parametri();

RecTangle PP;

PP.show_parametri();

}
_circle::_circle()
{
cout<<"Parametri okruzhnosti"<<endl;

n=1;

p=new float[n];

cout<<"Vvedite radius";

cin>>p[0];

}
float _circle::perimetr()

{
return 2*PI*p[0];

}
float _circle::square()

{
return PI*p[0]*p[0];

}
void _circle::show_parametri()

{
cout<<"This is circle"<<endl;

cout<<"Radius="<<p[0]<<endl;

cout<<"Perimetr="<<perimetr()<<endl;

cout<<"Square="<<square()<<endl;

}
RecTangle::RecTangle()
{
cout<<"Parametri rectangle"<<endl;

n=4; p=new float[n];

cout<<"Vvedite dlini storon";

cin>>p[0]>>p[1];

p[2]=p[0];

p[3]=p[1];

}
float RecTangle::square()

{
return p[0]*p[1];

}
void RecTangle::show_parametri()

{
cout<<"This is Rectangle"<<endl;

cout<<"a="<<p[0]<<" b="<<p[1]<<endl;

cout<<"Perimetr="<<perimetr()<<endl;

cout<<"Square="<<square()<<endl;

}
Результаты работы программы

This is abstract constructor

Parametri okruzhnosti

Vvedite radius

10
This is circle

Radius=10
Perimetr=62.8318
Square=314.159
This is abstract constructor

Parametri rectangle

Vvedite dlini storon

10
20
This is Rectangle

a=10 b=20

Perimetr=60
Square=200
Press any key to continue

Контрольные вопросы

1. Что такое объе́ктно-ориенти́рованное программи́рование?

2. Что называется классом?

3. Что такое объект?

4. Что такое прототип?

5. Что называется абстракцией данных?

6. Что такое инкапсуляция?

7. В чем состоит процесс сокрытия данных?

8. Что такое наследование?

9. Укажите основные свойства наследования.

10. Что такое полиморфизм?

11. Укажите основные концепции ООП.

12. Укажите основные средства, обеспечивающие инкапсуляцию.

13. В чем отличие компонентно-ориентированного программирования от прототипного?

14. Укажите основные принципы производительности объектных программ.

15. В чем суть работы функции-конструктор?

16. Как осущетсвляется перегрузка функций-конструкторов?

17. Как осуществляется построение функции-деструктор?

18. Назначение указателя this.

19. Создание статических членов классов и статических методов?

20. В чем суть виртуальных методов?

 


Дата добавления: 2019-09-13; просмотров: 219; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!