C++程序输出2

预测下面的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
喜欢就支持一下吧
点赞15 分享