目录
一.继承的概念与定义
1.1概念
说得简单一点继承就是用已有的类来定义新的类,所定义的新类不仅拥有已有的类的成员,还可以自己附加一些成员上去,实现了扩展原有功能的作用。
这种机制是面向对象编程使代码可以复用的重要手段,呈现了C++面向对象编程的思想。
举个栗子吧!
class Person
{
public:
void Print()
{
cout << "name:" << _name << endl;
cout << "age:" << _age << endl;
}
protected:
string _name = "peter"; // 姓名
int _age = 18; // 年龄
};
// 继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。这里体现出了
Student和Teacher复用了Person的成员。下面我们使用监视窗口查看Student和Teacher对象,可
以看到变量的复用。调用Print可以看到成员函数的复用。
class Student : public Person
{
protected:
int _stuid; // 学号
};
class Teacher : public Person
{
protected:
int _jobid; // 工号
};
int main()
{
Student s;
Teacher t;
s.Print();
t.Print();
return 0;
}
监视窗口结果:
可以看见Student对象s不止有着从Person继承的_name和_age,还有自己的_stuid,同理可以看见Teacher对象t不止有着从Person继承的_name和_age,还有自己的_jobid。
2.继承的定义
2.1定义格式
下面我们可以看到Person是父类,Student是子类,这就是继承的基本格式!
2.2继承关系和访问限定符
- 继承关系符指的是在派生类的类名加冒号后面的字符
- 访问限定符指的是对成员的声明
用一张图说明:
需要特别注意的是:
(1)基类private成员还是继承到派生类中,但是无论什么方式都访问不了
(2)class默认继承方式是private,struct默认继承方式是public
二.基类和派生类对象赋值转换
- 派生类对象可以赋值给基类对象/基类引用/基类指针,这样的操作有个形象的说法叫切片或者切割。
- 基类对象不能赋值给派生类对象。
- 基类指针或引用可以通过强制类型转换赋值给派生类指针或引用,但是只有在基类的指针是指向派生类的时候才是安全的。但是建议尽量不要这样操作。
- 将派生类给基类,发生了类型转换,但是并没有产生临时变量(特殊处理)