目录
一、继承方式
二、继承中的对象模型
三、继承中的构造和析构
一、继承方式
- 公共继承
- 父类中private到子类中访问不到
- 父类中protected到子类中protected
- 父类中public到子类中public
- 保护继承
- 父类中private到子类中访问不到
- 父类中protected到子类中protected
- 父类中public到子类中protected
- 私有继承
- 父类中private到子类中访问不到
- 父类中protected到子类中private
- 父类中public到子类中private
二、继承中的对象模型
????????父类中私有属性,子类也继承了,但是编译器给隐藏了,隐藏访问不到
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
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) << endl;//16
}
int main()
{
test01();
return 0;
}
三、继承中的构造和析构
- 继承中,先调用父类构造,再调用子类构造? 析构是相反的
- 可以利用初始化列表语法 显示指定出调用父类的哪个构造函数
- 子类不会继承父类中 的构造和析构函数 只有父类自己知道如何析构和构造属性
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
class Base
{
public:
Base()
{
cout << "Base的构造函数调用" << endl;
}
~Base()
{
cout << "Base的析构函数调用" << endl;
}
};
//继承中,先调用父类构造,再调用子类构造 析构是相反的
class Son:public Base
{
public:
Son()
{
cout << "Son的构造函数调用" << endl;
}
~Son()
{
cout << "Son的析构函数调用" << endl;
}
};
void test01()
{
//Base b;
Son s;
}
class Base2
{
public:
Base2(int a)
{
this->m_A = a;
cout << "Base的有参构造函数调用" << endl;
}
int m_A;
};
//代表继承
class Son2 :public Base2
{
public:
//初始化列表
//可以利用初始化列表语法 显示指定出调用父类的哪个构造函数
Son2(int a) :Base2(a)
{
cout << "a="<<a << endl;
}
};
void test02()
{
Son2 s(100);
}
//子类不会继承父类中 的构造和析构函数 只有父类自己知道如何析构和构造属性
int main()
{
test02();
system("pause");
return 0;
}
|