预测下面的C++程序的输出。
null
问题1
#include<iostream> using namespace std; class A { public : A( int ii = 0) : i(ii) {} void show() { cout << "i = " << i << endl;} private : int i; }; class B { public : B( int xx) : x(xx) {} operator A() const { return A(x); } private : int x; }; void g(A a) { a.show(); } int main() { B b(10); g(b); g(20); getchar (); return 0; } |
输出: i=10 i=20
因为有一个 转换构造函数 在类A中,整数值可以分配给类A的对象,函数调用g(20)起作用。此外,类B中还有一个重载的转换运算符,因此我们可以用类B的对象调用g()。
问题2
#include<iostream> using namespace std; class base { int arr[10]; }; class b1: public base { }; class b2: public base { }; class derived: public b1, public b2 {}; int main( void ) { cout<< sizeof (derived); getchar (); return 0; } |
输出:如果整数需要4个字节,则为80。
自从 b1 和 b2 两者都继承自阶级 基础 ,两份课堂报告 基础 课堂上有吗 衍生 .这种没有虚拟的继承会造成空间浪费和歧义。在这种情况下,虚拟基类用于节省空间和避免歧义。例如,下面的程序打印48。8个额外字节用于编译器存储的簿记信息(详细信息请参见此)
#include<iostream> using namespace std; class base { int arr[10]; }; class b1: virtual public base { }; class b2: virtual public base { }; class derived: public b1, public b2 {}; int main( void ) { cout<< sizeof (derived); getchar (); return 0; } |
如果您发现任何答案/解释不正确,或者您想分享有关上述主题的更多信息,请发表评论
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END