深度剖析C++继承

目录

一.继承的概念与定义

1.1概念

2.继承的定义

2.1定义格式

2.2继承关系和访问限定符

 二.基类和派生类对象赋值转换

 三.继承中的作用域

3.1概念

 3.2成员同名

3.3函数同名

四.派生类的默认成员函数

4.1概念

​编辑 4.2总结

4.3代码实现举例

五.继承和友元

六.继承与静态成员

七.菱形继承和菱形虚拟继承

7.1菱形继承

7.2菱形虚拟继承


一.继承的概念与定义

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. 继承关系符指的是在派生类的类名加冒号后面的字符
  2. 访问限定符指的是对成员的声明

用一张图说明:

需要特别注意的是:

(1)基类private成员还是继承到派生类中,但是无论什么方式都访问不了

(2)class默认继承方式是private,struct默认继承方式是public

 二.基类和派生类对象赋值转换

  1. 派生类对象可以赋值给基类对象/基类引用/基类指针,这样的操作有个形象的说法叫切片或者切割
  2. 基类对象不能赋值给派生类对象。
  3. 基类指针或引用可以通过强制类型转换赋值给派生类指针或引用,但是只有在基类的指针是指向派生类的时候才是安全的。但是建议尽量不要这样操作。
  4. 将派生类给基类,发生了类型转换,但是并没有产生临时变量(特殊处理)

 

 三.继承中的作用域

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值