📜  C++程序的输出| 2套

📅  最后修改于: 2022-05-13 01:56:11.061000             🧑  作者: Mango

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。

由于b1b2从类都继承,类的两个副本在那里在派生的类。这种没有虚的继承造成了空间的浪费和歧义。在这种情况下,虚拟基类用于节省空间并避免歧义。例如,以下程序打印 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<