📜  C++程序的输出|套装16

📅  最后修改于: 2021-05-30 15:57:56             🧑  作者: Mango

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

问题1

#include
using namespace std;
  
class Base 
{
public:
    int fun()      { cout << "Base::fun() called"; }
    int fun(int i) { cout << "Base::fun(int i) called"; }
};
  
class Derived: public Base 
{
public:
    int fun(char x)   { cout << "Derived::fun(char ) called"; }
};
  
int main() 
{
    Derived d;
    d.fun();
    return 0;
}

输出:编译器错误。
在上面的程序中,派生类中无法访问基类的fun()。如果派生类创建的成员方法的名称与基类中的方法之一相同,则所有具有该名称的基类方法都将隐藏在派生类中(有关更多详细信息,请参见此方法)

问题2

#include
using namespace std;
class Base 
{
   protected:
      int x;
   public:
      Base (int i){ x = i;}
};
  
class Derived : public Base 
{
   public:
      Derived (int i):x(i) { }
      void print() { cout << x ; }
};
  
int main()
{
    Derived d(10);
    d.print();
}

输出:编译器错误
在上面的程序中,x是受保护的,因此可以在派生类中对其进行访问。派生类构造函数尝试使用初始化程序列表直接初始化x,即使x是可访问的,也不允许这样做。基类的成员只能通过基类的构造函数调用来初始化。以下是更正的程序。

#include
using namespace std;
class Base {
   protected:
      int x;
   public:
      Base (int i){ x = i;}
};
  
class Derived : public Base {
   public:
      Derived (int i):Base(i) { }
      void print() { cout << x; }
};
  
int main()
{
    Derived d(10);
    d.print();
}

输出:

10 
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”