C++程序的输出| 2套
预测以下 C++ 程序的输出。
问题 1
#include
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;
}
输出:
我 = 10
我 = 20
由于类 A 中有一个 Conversion 构造函数,因此可以将整数值分配给类 A 的对象,函数调用 g(20) 起作用。此外,在类 B 中有一个重载的转换运算符,因此我们可以使用类 B 的对象调用 g()。
问题2
#include
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<
输出:如果整数占用 4 个字节,则为 80。
由于b1和b2从类碱都继承,类碱的两个副本在那里在派生的类。这种没有虚的继承造成了空间的浪费和歧义。在这种情况下,虚拟基类用于节省空间并避免歧义。例如,以下程序打印 48。8 个额外字节用于编译器存储的簿记信息(详细信息请参见此处)
#include
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<