## 今天学了什么
今天学习C++类与对象-继承,下级别成员除了拥有上一级的共性,还有自己的特性,利用继承可以减少重复代码。
## 继承方式
语法:class 子类(派生类) : 继承方式 父类(基类)
继承方式分为三种:公共继承、保护继承、私有继承。
注:父类中所有非静态成员都会被子类继承,包括private下的成员,private下的成员只是被编译器隐藏,访问不到。
验证:sizeof(Son)打印结果:16。
class Base {
public:
Base()
{
b_age = 10;
b_pro = 20;
b_pri = 30;
}
int b_age;
protected:
int b_pro;
private:
int b_pri;
};
class Son : public Base
{
public:
Son()
{
s_num = 20;
}
int s_num;
};
void test()
{
Son s;
cout << "s_num= " << s.s_num << " Son 继承 Base的 b_age= " << s.b_age << endl;
cout << "sizeof(Son): "<<sizeof(Son) << endl;
}
打开开发人员提示工具(Developer Command Prompt),输入cl /d1 reportSingleClassLayoutSon 继承.cpp ,回车,查看size大小确实是16,父类的三个int都被继承。

## 子类继承父类后的构造析构顺序
子类继承父类后会调用父类的构造函数:
class Base {
public:
Base()
{
cout << "Base 的构造函数" << endl;
}
~Base() {
cout << "Base 的析构函数" << endl;
}
};
class Son : public Base
{
public:
Son()
{
s_num = 20;
cout << "Son 的构造函数" << endl;
}
~Son()
{
cout << "Son 的析构函数" << endl;
}
int s_num;
};
void test()
{
Son s;
s.s_num=10;
cout << "sizeof(Son): "<<sizeof(Son) << endl;
}
打印结果,构造顺序:父类构造-子类构造-子类析构-父类析构,下断点进入调试,逐步调试发现,先进入Base构造函数,后进入Son的构造函数,析构则相反。
## 同名成员处理方式
** 当子类与父类出现同名成员时,如何访问 **
- 访问子类成员: 直接访问 s.name ;
- 访问父类成员:加作用域,例 s.Base::name;
- 当子类出现和父类同名的成员函数时,子类的同名成员会隐藏掉父类所有同名成员函数,想访问需要加作用域,例 s.Base::func();
## 同名静态成员处理方式
访问子类成员: Son::name ;
通过子类的类名访问父类静态成员::Son::Base::name;
## 多继承
C++允许一个类继承多个类。
语法:class 子类:继承方式 父类1,继承方式 父类2…
注:子类访问不同父类成员,最好加上作用域,防止不同父类同名引发的错误。
## 菱形继承(钻石继承)
菱形继承:两个派生类继承同一个基类,又有一个类同时继承两个派生类,如下图:

class A {
public:
int age;
int name;
};
class B:virtual public Animal {};
class C :virtual public Animal {};
class D :public B,public C {
public:
int n;
};
void test()
{
D d;
d.B::m_age = 10;
d.name = 100;
cout << d.name << endl;
cout << d.B::name << endl;
cout << d.name << endl;
}
类B、类C同时继承类A的成员,类D在使用数据时,需用作用域区分;
类D继承两份相同数据,资源浪费,利用虚继承可以解决这一问题。

![[LangChain] 学习笔记(02):LCEL 链式调用与动态模型配置实战-171主机测评](https://www.171host.com/wp-content/uploads/2026/10/20261030203301-6ae4fefdb54f3-220x150.png)
![[LangChain] 学习笔记(02):LCEL 链式调用与动态模型配置实战-171主机测评](https://www.171host.com/wp-content/uploads/2026/10/20261030202745-6ae4fdc1556bf-220x150.png)
