c++之继承
例子: #include<iostream> using namespace std; class BasePage { public: void header() { cout << "公共头部" << endl; } footer() { cout << 公共尾部 endl; } }; class Java: BasePage{ content() { cout << java相关视频 endl; } }; class Cpp :c++相关视频 test() { Java java; java.header(); java.content(); java.footer(); Cpp cpp; cpp.header(); cpp.content(); cpp.footer(); } int main() { test(); system(pause"); return 0; } 将公有的抽取出来在作为父类,子类继承父类之后就拥有了父类的公有方法。 首先需明确:子类不能访问父类的私有属性和方法。 继承方式有: 公共继承:子类所有属性和方法和修饰符和父类中保持一致; 保护继承:子类所有属性和方法为protected; 私有继承:子类所有属性和方法为private; 继承对象模型: #include<iostream> Base{ a; protected b; private c; }; class Son : Base { d; }; test() { cout << Son所占字节数为:" << sizeof(Son) << endl; } ; } 输出: 我们发现父类的所有属性都被继承了,但是private类型的属性在子类中却不能被访问。? 继承中构造和析构顺序:父类构造、子类构造、子类析构、父类析构。 继承中同名处理方式:访问子类同名成员,直接访问;访问父类同名成员,需要加作用域; #include<iostream> a; Base() { a = 10; } show() { cout << Base endl; } }; Base { : Son() { a = 20Son test() { Son s; cout << s.a << endl; cout << s.Base::a << endl; s.show(); s.Base::show(); } ; } 输出: 继承中同名静态成员处理:与同名成员处理一致,只不过通过类名直接访问而不是对象访问时需要加各自的作用域,即 Son::a; Son::Base::a; 多继承语法:c++可以有多重继承。class A:public B,public C{}; 菱形继承:两个子类同时继承一个基类;又有某个类同时继承这两个子类; 存在两个问题:
#include<iostream> a; }; class Son1 : Base {}; class Son2 :class End :public Son1, Son2 {}; test() { End e; e.Son1::a = ; e.Son2::a = ; cout << e.Son1::a << endl; cout << e.Son2::a <<; } 此时输出: 加入了virtual之后:(vbptr虚基类指针,通过偏移量找到唯一的一份数据) #include<iostream> class Son1 :virtual class Son2 :; } 此时输出:就只有一份数据了 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |