C++基础-6-继承
6. 继承
1 #include<iostream> 2 using namespace std; 3 4 5 class Base { 6 public: 7 Base() { 8 m_A = 10; 9 } 10 int m_A; 11 12 }; 13 14 class Son: public Base { 15 public: 16 Son() { 17 m_A = 20; 18 } 19 int m_A; 20 }; 21 22 // 对于静态成员 23 class Base1 { 24 public: 25 26 static int m_A; 27 28 }; 29 30 int Base1::m_A = 10; 31 32 class Son1 : public Base1 { 33 public: 34 35 static int m_A; 36 }; 37 int Son1::m_A = 20; 38 39 void test01() { 40 // 1.通过对象访问 41 Base b1; 42 Son s1; 43 cout << "通过对象访问" << endl; 44 cout << "Base ---> m_A:" << b1.m_A << endl; 45 cout << "Son ---> m_A:" << s1.Son::m_A << endl; 46 47 48 // 2.通过类名访问(对于静态成员) 49 cout << "通过类名访问" << endl; 50 cout << "Base1 ---> m_A:" << Base1::m_A << endl; 51 cout << "Son1 ---> m_A:" << Son1::Base1::m_A << endl; 52 } 53 54 int main() { 55 56 test01(); 57 58 system("pause"); 59 60 return 0; 61 } 62 63 // 总结(继承) 64 // 继承---目的是减少重复代码,提高代码的复用率 65 // 66 // 继承语法:class 子类: 继承方式 父类 67 // 继承方式:公共继承(public),保护继承(protected),私有继承(private) 68 // 69 // 父类中所有的非静态成员属性都会被子类继承下去 70 // 父类中私有成员属性 是被编译器隐藏了,因此访问不到,但是会被继承下去 71 // 72 // cl /d1 reportSingleClassLayout(xxx类名) xxx.cpp 73 // 第一个是L,第二个是123的1,报告单各类的布局 74 // 75 // 继承中构造和析构的顺序: 76 // 先构造 父类,再构造 子类; 析构顺序与构造顺序相反; 77 // 78 // 继承同名成员(变量/函数)的处理方式: 79 // 当子类与父类出现同名成员, 80 // 访问子类同名成员 直接访问即可 s.m_A 81 // 访问父类同名成员 需要加作用域 s.Base::m_A 82 // 83 // 此外,对于静态成员,处理方式与非静态成员相同 84 // 85 // 菱形继承 86 // 两个派生类继承同一个基类 87 // 又有某个类同时继承两个派生类 88 // 这样的继承成为菱形继承,或者钻石继承 89 // 90 // 存在问题: 91 // 产生二义性(加作用域解决) 92 // 重复继承,只需要一份继承即可 93 // 利用虚继承解决,关键字virtual 94 //
参考:《黑马程序员》C++教程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)