C++继承和包含知识及测试代码
·
0.前言
研究STL库,看到了很多继承,包含,重定义之类的操作。这里补充部分基础知识,以便会看。
1.测试代码
#include<iostream>
using namespace std;
// 测试顺序
class A{
protected:
typedef uint16_t uint16;
public:
int i;
A(){
i = 0;
cout << "A constructor called, i = " << i << endl;
}
};
class C{
public:
int k;
C(){
k = 2;
cout << "C constructor called, k = " << k << endl;
}
};
class B:public A{
public:
C c;
int j;
int i;
// using A::i; // 继承父类的成员变量
B(){
j = 1;
cout<<A::i<<endl; // 直接访问父类的成员变量
cout << "B constructor called, j = " << j << endl;
cout<<c.k<<endl;
}
};
int main(void){
B b;
// B::uint16 a = 0x1234; // 使用父类的typedef
return 0;
}
2.知识点汇总
p1:实例化类B的执行流程
流程1:先进入B的父类对象A并执行构造函数,打印相关信息
流程2:进入B包含的对象c并执行构造函数,打印相关信息
流程3:进入B自身并执行构造函数,打印相关信息
建议从内存的角度加深理解!
p2:类中的类型继承
STL中有大量的类型重定义,而且嵌套的次数是在太多了,这让人十分头疼。
从1中的代码可以看到类A定义了一个类型uint16,而且访问权限是protected,所以在其子类B中可以使用该类型
p3:类中访问隐藏变量(函数)
在类B和类A中定义了变量i,所以在实例化B的对象中包含了两份i的内存。如果需要访问父类A中的变量i,可以使用A::i。如果需要访问父类中的成员函数也是类似的。
p4:using的使用
在 effectve c++中有提到using的用法,但是这里的using是可以省略的。
更多推荐


所有评论(0)