<C++>初识类的继承,用三行情诗打开继承的大门
类的继承
语法:
class A:public B;
A 类成为之类或者派生类
B 类称为父类或者 基类
继承的好处:减少重复代码的使用,使程序简洁。
具体实现
//初识C++继承 class base { public: void shqs1() { cout << "砚只一方三两重" << endl; cout << "又怎研得尽" << endl; cout << "人间累世情长" << endl; } void divide() { cout << "----------------------------" << endl; } void shqs2() { cout << "我只想寐在花海里" << endl; cout << "枕着你的情歌入梦" << endl; cout << "让三千花色为你开作红颜万千" << endl; } }; class I:public base { public: I() { cout << "小时候我想对你说:" << endl; } }; class DI:public base { public: DI() { cout << "长大后我想对你说:" << endl; } }; int main() { I i; i.shqs1(); i.divide(); DI di; di.shqs2(); }
效果展示:
注意事项
I和DI类的无参构造会在创建对象时自动调用,因此主函数没写调用语句也会打印出效果中的两句话。
派生类中的成员包括两部分:
一类是从基类继承过来的,一类是自己增加的成员。
从基类继承过来的表现其共性,而新增的成员体现其个性。
继承的三种方式
公共继承:子类继承的父类属性权限无变化
保护继承:子类继承的父类属性权限变为保护
私有继承:子类继承的父类属性权限变为私有
注:无论子类进行哪种继承方式都不能继承父类的私有属性
具体实现
class Base { public: int m_A; protected: int m_B; private: int m_C; }; //公共继承 class Son1 :public Base { public: void func() { m_A; //可访问 public权限 m_B; //可访问 protected权限 //m_C; //不可访问 } }; void test1() { Son1 s1; s1.m_A; //其他类只能访问到公共权限 } //保护继承 class Son2 :protected Base { public: void func() { m_A; //可访问 protected权限 m_B; //可访问 protected权限 //m_C; //不可访问 } }; void test2() { Son2 s; //s.m_A; //不可访问 } //私有继承 class Son3 :private Base { public: void func() { m_A; //可访问 private权限 m_B; //可访问 private权限 //m_C; //不可访问 } }; class GrandSon :public Son3 { public: void func() { //Son3是私有继承,所以继承Son3的属性在GrandSon中都无法访问到 //m_A; //m_B; //m_C; } };
继承中的对象模型
上面说到父类的私有属性子类无法继承,那么子类的对象成员所占的内存空间怎么计算呢,要不要加上私有属性。我感觉会带上,因为万一用友元不就可以继承了。带着这个疑惑,我直接进行了代码测试。
具体实现
class Base { public: int m_A; protected: int m_B; private: int m_C; }; class Son :public Base { public: int m_D; }; void test01() { cout << "sizeof Son = " << sizeof(Son) << endl; } int main() { test01(); system("pause"); return 0; }
🎉总结
C++初识类的继承,主要讲了类的继承语法,继承的三种方式,以及继承的对象模型,内容不算多,但是很有趣。