📜  C++程序的输出|设置 3

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

C++程序的输出|设置 3

预测以下 C++ 程序的输出。
问题 1

C++
#include
 
using namespace std;
class P {
public:
   void print()
   { cout <<" Inside P::"; }
};
 
class Q : public P {
public:
   void print()
   { cout <<" Inside Q"; }
};
 
class R: public Q {
};
 
int main(void)
{
  R r;
 
  r.print();
  return 0;
}


C++
#include
#include
 
using namespace std;
 
class Base
{
public:
  Base()
  {
    fun(); //note: fun() is virtual
  }
  virtual void fun()
  {
    cout<<"\nBase Function";
  }
};
 
class Derived: public Base
{
public:
  Derived(){}
  virtual void fun()
  {
    cout<<"\nDerived Function";
  }
};
 
int main()
{
  Base* pBase = new Derived();
  delete pBase;
  return 0;
}


输出:
内Q

打印函数未在类 R 中定义。因此在继承层次结构中查找它。 print()出现在PQ类中,应该调用它们中的哪一个?这个想法是,如果存在多级继承,则在继承层次结构中线性搜索函数,直到找到匹配的函数。

问题2

C++

#include
#include
 
using namespace std;
 
class Base
{
public:
  Base()
  {
    fun(); //note: fun() is virtual
  }
  virtual void fun()
  {
    cout<<"\nBase Function";
  }
};
 
class Derived: public Base
{
public:
  Derived(){}
  virtual void fun()
  {
    cout<<"\nDerived Function";
  }
};
 
int main()
{
  Base* pBase = new Derived();
  delete pBase;
  return 0;
}

输出:
基函数

有关解释,请参阅以下 C++ 标准的摘录。

当从构造函数(包括从数据成员的 mem 初始化器)或从析构函数直接或间接调用虚函数,并且该调用适用的对象是正在构造或销毁的对象,则调用的函数是在构造函数和析构函数本身类或在其基地之一一个定义,而不是在一个类中重写它的函数从构造函数和析构函数的类,或者重写它在最派生对象的其他基类的一个派生。