class A { public: int a; A(int p):a(p) {} } class B : public A { public: int b; B(int p1, int p2):A(p1), b(p2) {} } //B的构造函数先由A的构造函数初始化a,然后执行A的构造函数体,接着初始化b,最后执行B的构造函数体 //派生类声明时,声明中包含类名但是不包含它的派生列表 class B : public A;//错误 class B;//正确如果某个类被当作基类,则该类必须被定义,而不能仅仅被声明。
class A; //仅仅声明了A类 class B : public A { ... } //错误,A类必须被定义从派生类向基类的类型转换只对指针或引用类型有效 基类向派生类不存在隐式的类型转换 当我们用一个派生类对象为一个基类对象初始化或赋值时,只有该派生类对象中基类的部分会被拷贝、移动、赋值,它的派生类部分将被忽略掉。所以得到的基类对象无法强制转换成派生类对象。
class A {} class B : public A {} B b; A a(b);//实际上,调用的是拷贝构造函数,即A::A(const A&) a = b;//实际上,调用的是拷贝赋值运算符,即A::operator=(const A&)列表内容
如对本文有疑问, 点击进行留言回复!!
clion+vs编译器+Qt5中使用QPrinter和QprintDialog类
基于open62541在QT编写OPCUA特定的客户端程序(含有源码) + VS2015 C语言搭建OPCUA客户端环境
网友评论