类的继承与派生
定义与语法
- 类的继承是指 **新的类从已有类那里得到已有的特性;从已有类产生新类的过程就是累的派生** 。原有的类成为**基类**或**父类**,产生的新类称为**派生类**或**子类**。
- 语法:
class <派生类名>:<继承方式> <基类①>, <继承方式> <基类②>,.... , <继承方式> <基类N>
{
<派生类成员声明>;
};
- 例: 假设基类Base1和Base2是已经定义的类,下面定义一个Derived的派生类:
class Derived: public Base1, private Base2
{
public:
Derived();
~Derived();
};
访问控制
- 公有继承:
- 当类的继承方式为公有继承是,基类的公有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可直接访问。
- 私有继承:
- 当类的继承方式为私有继承时,基类的公有成员和保护成员都以私有成员身份出现在派生类中,而基类的私有成员不可直接访问。
- 例:
#include<iostream>
using namespace std;
class Point {
private:
float x, y;
public:
void initP(float xx, float yy)
{
x = xx;
y = yy;
}
void Move(float xOff, float yOff)
{
x = xOff;
y = yOff;
}
float GetX() { return x; }
float GetY() { return y; }
};
class Rectangle : public Point {
private:
float W, H;
public:
void initR(float x, float y, float w, float h)
{
initP(x, y);
W = w;
H = h;
}
float GetW() { return W; }
float GetH() { return H; }
};
int main()
{
Rectangle Trigger;
Trigger.initR(1, 2, 3, 4);
Trigger.Move(5, 6);
cout << "H : " << Trigger.GetX() << endl;
cout << "W : " << Trigger.GetY() << endl;
cout << "X : " << Trigger.GetW() << endl;
cout << "Y : " << Trigger.GetH() << endl;
return 0;
}
- 结果:
![](https://img2018.cnblogs.com/blog/1784272/201910/1784272-20191013162037166-431225319.png)