Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему 7. Производные классы

Содержание

7.1. Производный классОпределяет тип, являющийся разновидностью другого типапроизводныйбазовыйЕСТЬ НЕКОТОРЫЙ
7. Производные классы 7.1. Производный классОпределяет тип, являющийся	разновидностью другого типапроизводныйбазовыйЕСТЬ НЕКОТОРЫЙ 7.2. НаследованиеПроизводный класс ЕСТЬ базовый плюс обязательно что-то своеБазовый классПроизводный класссостояниеметодысостояниеметоды 7.3. Базовый класс class B { private:	 int x; protected: 	 int 7.4. Производный класс class D: тип наследования B { private: 	 int 7.4. Производный классВопросы:могут ли (и как) методы производного класса получить доступ к 7.4. Производный классvoid D::g(){	 x = 0; – ошибка!	 f(); g1(); – 7.5. Тип наследования 7.5. Тип наследованияB ob1; D ob2;ob1.f(); ob2.f(); – ошибка!ob2.fd(); – ошибка!ob1.g(); ob1.g1(); 7.6. Пример		Окружность есть точка, имеющая некоторый размерКласс Окружность:наследует состояние и методы базового 7.6.1. Класс Pointclass Point {private:	double x, y;public:	Point():x(0), y(0) {}	Point(double x0):x(x0), y(x0){}	Point(double x0, double y0):x(x0), y(y0){} 7.6.1. Класс Point	double distance(const Point &p) const {		double dx = x – 7.6.1. Класс Pointostream & operator 7.6.2. Класс Circleclass Circle : public Point {private:	double rad;public:	Circle(double r = 0);	Circle(double 7.6.2. Класс Circle	int intersect (const Circle &c) const {  		return distance(c) 7.6.2. Класс CircleCircle::Circle(double r):		Point(), rad(r){ }Circle::Circle(double x, double y, double r):		Point(x, y), 7.6.2. Класс Circleostream& operator 7.7. Тестирование классовPoint p1, p2(1);Circle c1(1), c2(p2);cout 7.7. Тестирование классовPoint p1, p2(1);Circle c1(1), c2(p2);float d;d = p1.distance(p2); d = 7.8. Организация ввода/выводаclass Point {. . .protected:	ostream &print(ostream &) const;	friend ostream & operator 7.8. Организация ввода/выводаostream &Point::print(ostream &os) const {	return os 7.8. Организация ввода/выводаclass Circle: public Point {. . .protected:	ostream &print(ostream &) const;	friend ostream& operator 7.8. Организация ввода/выводаostream & Circle::print(ostream &os) const{	os 7.8. Организация ввода/выводаostream & operator 7.9. Копированиеclass B {  … public:  B(const B&);  …}; 7.10. Указатели на классыclass B {  … public:  … 7.10. Указатели на классыB bOb;  D dOb;bOb.f();dOb.f1();dOb.f();B *bPtr = &bOb;D *dPtr = &dOb;bPtr->f();  (*bPtr).f();dPtr->f1();dPtr->f(); 7.10. Указатели на классыbPtr = &dOb;dPtr = &bOb; – ошибка!!!bObdObbPtrdPtr??? 7.10. Указатели на классыbPtr = &dOb;bPtr->f(); – какой метод ??? bPtr->f1(); – что будет ??? bObdObbPtr
Слайды презентации

Слайд 2 7.1. Производный класс
Определяет тип, являющийся
разновидностью другого типа

производный
базовый
ЕСТЬ НЕКОТОРЫЙ

7.1. Производный классОпределяет тип, являющийся	разновидностью другого типапроизводныйбазовыйЕСТЬ НЕКОТОРЫЙ

Слайд 3 7.2. Наследование
Производный класс ЕСТЬ базовый плюс обязательно что-то

7.2. НаследованиеПроизводный класс ЕСТЬ базовый плюс обязательно что-то своеБазовый классПроизводный класссостояниеметодысостояниеметоды

свое
Базовый класс
Производный класс
состояние
методы
состояние
методы


Слайд 4 7.3. Базовый класс
class B {
private:
int

7.3. Базовый класс class B { private:	 int x; protected:

x;
protected:
int y;
void f();
public:
void

g();
void g1();
};

Слайд 5 7.4. Производный класс
class D: тип наследования B

7.4. Производный класс class D: тип наследования B { private:

{
private:
int xd;
protected:
int y;
void

fd();
public:
void g();
};

Слайд 6 7.4. Производный класс
Вопросы:
могут ли (и как) методы производного

7.4. Производный классВопросы:могут ли (и как) методы производного класса получить доступ

класса получить доступ к состоянию и методам базового класса

можно

ли (и как) получить доступ к состоянию и методам базового класса через экземпляр производного класса

Слайд 7 7.4. Производный класс
void D::g()
{
x = 0; –

7.4. Производный классvoid D::g(){	 x = 0; – ошибка!	 f(); g1();

ошибка!
f(); g1(); – методы базового класса
y =

3; – состояние производного класса
B::y = 5; – состояние базового класса
fd(); g(); – методы производного класса
B::g(); – метод базового класса
}

Слайд 8 7.5. Тип наследования

7.5. Тип наследования

Слайд 9 7.5. Тип наследования
B ob1; D ob2;
ob1.f(); ob2.f(); –

7.5. Тип наследованияB ob1; D ob2;ob1.f(); ob2.f(); – ошибка!ob2.fd(); – ошибка!ob1.g();

ошибка!
ob2.fd(); – ошибка!
ob1.g(); ob1.g1(); – ok!
ob2.g1(); – ok

только для public наследования!
ob2.g(); – метод производного класса
ob2.B::g(); – метод базового класса (только для public наследования)



Слайд 10 7.6. Пример


Окружность есть точка, имеющая некоторый размер
Класс Окружность:
наследует

7.6. Пример		Окружность есть точка, имеющая некоторый размерКласс Окружность:наследует состояние и методы

состояние и методы базового класса Точка
должен определить собственные состояние

и/или методы
может переопределить какие-то методы базового класса


Слайд 11 7.6.1. Класс Point
class Point {
private:
double x, y;
public:
Point():x(0), y(0)

7.6.1. Класс Pointclass Point {private:	double x, y;public:	Point():x(0), y(0) {}	Point(double x0):x(x0), y(x0){}	Point(double x0, double y0):x(x0), y(y0){}

{}
Point(double x0):x(x0), y(x0){}
Point(double x0, double y0):x(x0), y(y0){}



Слайд 12 7.6.1. Класс Point
double distance(const Point &p) const {
double

7.6.1. Класс Point	double distance(const Point &p) const {		double dx = x

dx = x – p.x,
dy = y

– p.y;
return sqrt(dx*dx + dy*dy);
}
friend ostream & operator <<(ostream &, const Point &);
};


Слайд 13 7.6.1. Класс Point
ostream & operator

7.6.1. Класс Pointostream & operator

Point &p)
{
return os

" << p.y << ')‘;
}

Слайд 14 7.6.2. Класс Circle
class Circle : public Point {
private:
double

7.6.2. Класс Circleclass Circle : public Point {private:	double rad;public:	Circle(double r =

rad;
public:
Circle(double r = 0);
Circle(double x, double y, double r

= 1);
Circle(const Point &p, double r = 1);

Слайд 15 7.6.2. Класс Circle
int intersect (const Circle &c) const

7.6.2. Класс Circle	int intersect (const Circle &c) const { 		return distance(c)

{
return distance(c) < rad + c.rad;
}
friend ostream&

operator <<(ostream &, const Circle &);
};

Слайд 16 7.6.2. Класс Circle
Circle::Circle(double r):
Point(), rad(r){ }
Circle::Circle(double x, double

7.6.2. Класс CircleCircle::Circle(double r):		Point(), rad(r){ }Circle::Circle(double x, double y, double r):		Point(x,

y, double r):
Point(x, y), rad(r){ }
Circle::Circle(const Point &p, double

r):
Point(p), rad(r){ }


Слайд 17 7.6.2. Класс Circle
ostream& operator

7.6.2. Класс Circleostream& operator

&c)
{
return os

radius: " << rad;
}


Слайд 18 7.7. Тестирование классов
Point p1, p2(1);
Circle c1(1), c2(p2);

cout

7.7. Тестирование классовPoint p1, p2(1);Circle c1(1), c2(p2);cout

p2

1), radius: 1

Слайд 19 7.7. Тестирование классов
Point p1, p2(1);
Circle c1(1), c2(p2);
float d;
d

7.7. Тестирование классовPoint p1, p2(1);Circle c1(1), c2(p2);float d;d = p1.distance(p2); d

= p1.distance(p2);
d = c1.distance(c2);
d = c1.distance(p2);
d = p1.distance(c2);


1.41421
1.41421
1.41421
1.41421


Слайд 20 7.8. Организация ввода/вывода
class Point {
. . .
protected:
ostream &print(ostream

7.8. Организация ввода/выводаclass Point {. . .protected:	ostream &print(ostream &) const;	friend ostream & operator

&) const;
friend ostream & operator

&);
. . .
};

Слайд 21 7.8. Организация ввода/вывода
ostream &Point::print(ostream &os) const
{
return os

7.8. Организация ввода/выводаostream &Point::print(ostream &os) const {	return os

<< ')';
}
ostream & operator <<(ostream &os, const Point &p)
{
return p.print(os);
}

Слайд 22 7.8. Организация ввода/вывода
class Circle: public Point {
. .

7.8. Организация ввода/выводаclass Circle: public Point {. . .protected:	ostream &print(ostream &) const;	friend ostream& operator

.
protected:
ostream &print(ostream &) const;
friend ostream& operator

Circle &);
. . .
};

Слайд 23 7.8. Организация ввода/вывода
ostream & Circle::print(ostream &os) const
{
os

7.8. Организация ввода/выводаostream & Circle::print(ostream &os) const{	os

"center: ";
Point::print(os);
return os

rad;
}


Слайд 24 7.8. Организация ввода/вывода
ostream & operator

7.8. Организация ввода/выводаostream & operator

Circle &c)
{
return c.print(os);
}


Слайд 25 7.9. Копирование
class B {

public:

7.9. Копированиеclass B {  … public: B(const B&); …}; class

B(const B&);

};
class D: public B

{

};

void f(const D& d)
{
B b = d; // копирующий конструктор
b = d; // присваивание

}
Операторы присваивания не наследуются!!!


Слайд 26 7.10. Указатели на классы
class B {

7.10. Указатели на классыclass B {  … public: … void


public:

void f();

};
class

D: public B {

public:

void f();
void f1();

};


Слайд 27 7.10. Указатели на классы
B bOb;
D dOb;
bOb.f();
dOb.f1();
dOb.f();
B

7.10. Указатели на классыB bOb; D dOb;bOb.f();dOb.f1();dOb.f();B *bPtr = &bOb;D *dPtr = &dOb;bPtr->f();  (*bPtr).f();dPtr->f1();dPtr->f();

*bPtr = &bOb;
D *dPtr = &dOb;
bPtr->f();  (*bPtr).f();
dPtr->f1();
dPtr->f();


Слайд 28 7.10. Указатели на классы
bPtr = &dOb;
dPtr = &bOb;

7.10. Указатели на классыbPtr = &dOb;dPtr = &bOb; – ошибка!!!bObdObbPtrdPtr???

– ошибка!!!
bOb
dOb
bPtr
dPtr
???


  • Имя файла: 7-proizvodnye-klassy.pptx
  • Количество просмотров: 101
  • Количество скачиваний: 0