📜  C++ 程序的输出 |第 27 组(构造函数和析构函数)

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

C++ 程序的输出 |第 27 组(构造函数和析构函数)

先决条件:构造函数和析构函数

1) 以下程序的输出是什么?

#include 
using namespace std;
class Sand
{
    public: Sand()
        {
            cout << "Sand ";
        }
        ~Sand()
        {
            cout << "~Sand ";
        }
};
class Rock
{
    public: Rock()
        {
            cout << "Rock ";
        }
        ~Rock()
        {
            cout << "~Rock ";
        }
};
class Hill: public Sand
    {
        Rock data_;
        public: Hill()
            {
                cout << "Hill " << endl;
            }
            ~Hill()
            {
                cout << "~Hill ";
            }
    };
  
int main()
{
    Hill h;
    return 0;
}

输出:

Sand Rock Hill 
~Hill ~Rock ~Sand 

说明:首先基类对象是构造函数被调用,然后嵌入对象(数据成员)是
构造函数被调用,最后继承的构造函数被执行。破坏的顺序是相反的。

2) 以下程序的输出是什么?



class gfg
{
        ~gfg()
        {
            cout << "I love coding";
        }
    public:    gfg() 
        {
            cout << "I am at your service";
        }
};
int main()
{
   gfg mygfg;
}

输出:编译错误

error: ‘gfg::~gfg()’ is private

解释:
程序不会编译,因为析构函数是私有的。
3) 以下程序的输出是什么?

#include 
using namespace std;
class X 
{ 
    public: void foo() 
    {
        cout << "X::f ";
    }
    virtual void go()
    {
        cout << "X::g ";
    }
};
class Y: public X 
    {
        public: virtual void foo() 
            {
                cout << "Y::f ";
            }
        virtual void go() 
            {
                 cout << "Y::g "; 
            }    
     };
int main()
{
    X x;
    Y y;
    X& rx = y;
    rx.foo();
    rx.go();
    return 0;
}

输出:

X::f Y::g

说明:方法 X::f 在 X 中是非多态的(它只在 Y 类中是多态的)。因此 rx 绑定到引用类型( X& )而不是底层对象( Y& )。

4) 以下程序的输出是什么?

class A
{
    public: A(int)
    {
    }
};
  
void f()    
{
    A a[10];
}
  
int main()
{
 f();
}

输出:编译错误

no matching function for call to ‘A::A()’

说明:添加公共 A(){};到类 A 的定义。您需要一个无参数构造函数才能创建类的实例。当前构造函数需要两个输入字符串参数。如果没有声明其他构造函数,通常 C++ 意味着有这样一个构造函数(= 默认无参数构造函数)。通过用两个参数声明你的第一个构造函数,你覆盖了这个默认行为,现在你必须显式声明这个构造函数。

5) 以下程序的输出是什么?

#include 
using namespace std;
   
class GFG
{
public:
      GFG()
      {
         cout << "Hi from GFG. ";
      }
} g;
   
int main()
{
    cout << "You are in Main";
    return 0;
}

输出:

Hi from GFG. You are in Main

说明: g 是 GFG 类的对象,首先为其触发构造函数。然后打印 main 的 cout 语句。