只有public继承可以使派生类转换为基类.txt

来自「里面的代码是自己写的,参考书是thingking in c++,代码有详细的说明」· 文本 代码 · 共 41 行

TXT
41
字号
*本实验程序书上没有,我只是想测试一下。
见c++primer 3/e P800,只有public 继承是满足is-a子类型机制的,即是说明:派生类是基类的子类型。
但是其他继承方式就不是这种关系。
*/
#include <iostream>
using namespace std;

class A {
private:
	int _a;
public:
	A(int a=0) { _a = a;}
	int GetA() const { return _a;}
};

class B: public A { 

private:
      int _b;
public:
	B() { _b = 0;}
	B( int b ){ _b = b;}
};

void f( A &a){}

void ff( A a){}

void main()
{
	B b;
	A a = b;       //当继承方式为 private 或是 protected的时候 error C2243: “类型转换” : 从“B *__w64 ”到“const A &”的转换存在,但无法访问
	B bb;
	a=bb;          //当继承方式为 private 或是 protected的时候 error C2243: “类型转换” : 从“B *__w64 ”到“const A &”的转换存在,但无法访问
    
	f(bb);         // 当继承方式为 private 或是 protected的时候 error C2243: “类型转换” : 从“B *__w64 ”到“A &”的转换存在,但无法访问
    
	ff(bb);       //  当继承方式为 private 或是 protected的时候  error C2243: “类型转换” : 从“B *__w64 ”到“const A &”的转换存在,但无法访问
    
	//当继承方式为公有继承的时候,以上都正确。
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?