继承与派生概述:
- 被继承的已有类称为基类(或父类),派生出的新类称为派生类(或子类)
- 直接参与派生出某类的基类称为直接基类,基类的基类甚至更高层的基类称为间接基类
- 继承与派生是同一过程从不同的角度看:保持已有类的特性而构造新类的过程称为继承,在已有类的基础上新增自己的特性而产生新类的过程称为派生
继承与派生的目的:
- 继承的目的:实现设计与代码的重用。
- 派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造
基类成员的吸收与改造:
- 默认情况下派生类包含了全部基类中除构造和析构函数之外的所有成员
- 可以在派生类中定义和基类同名的成员,这样基类的同名成员就会被覆盖而失效
公有继承(public):
- 基类的public和protected成员:访问属性在派生类中保持不变
- 基类的private成员:不可直接访问
- 派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员
- 通过派生类的对象:只能访问public成员
#include<iostream>
class Point
{
public:
void Init(double x=0, double y=0)
{
this->x = x;
this->y = y;
}
void Move(double tx, double ty)
{
x += tx;
y += ty;
}
double GetX() const { return x; }
double GetY() const { return y; }
private:
double x, y;
};
class Rect: public Point
{
public:
void Init2(double x, double y, double w, double h)
{
Init(x, y);
this->w = w;
this->h = h;
}
double GetH() const { return h; }
double GetW() const { return w; }
private:
double w, h;
};
int main(void)
{
Rect s;
s.Init2(1, 1, 3, 4);
s.Move(3, 5);
printf("%.0f %.0f\n", s.GetX(), s.GetH());
return 0;
}