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

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

C++程序的输出| 15套

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

问题 1

#include 
using namespace std;
  
class A
{
public:
    void print() { cout << "A::print()"; }
};
  
class B : private A
{
public:
    void print() { cout << "B::print()"; }
};
  
class C : public B
{
public:
    void print() { A::print(); }
};
  
int main()
{
    C b;
    b.print();
}

输出:编译器错误:“A”不是“C”的可访问基础
上面的代码中存在多级继承。请注意“class B : private A”中的访问说明符。由于使用了私有访问说明符,“A”的所有成员在“B”中都变为私有。 “C”类是“B”的继承类。继承的类无法访问父类的私有数据成员,但 'C' 的 print() 尝试访问私有成员,这就是我们得到错误的原因。


问题2

#include
using namespace std;
  
class base
{
public:
    virtual void show()  { cout<<" In Base \n"; }
};
  
class derived: public base
{
    int x;
public:
    void show() { cout<<"In derived \n"; }
    derived()   { x = 10; }
    int getX() const { return x;}
};
  
int main()
{
    derived d;
    base *bp = &d;
    bp->show();
    cout << bp->getX();
    return 0;
}

输出:编译器错误:'class base' 没有名为 'getX' 的成员
在上面的程序中,有一个'base'类型的指针'bp'指向一个派生类型的对象。 show() 通过 'bp' 的调用很好,因为 'show()' 存在于基类中。事实上,它调用派生类“show()”,因为“show()”在基类中是虚拟的。但是对 'getX()' 的调用是无效的,因为基类中不存在 getX()。当基类指针指向派生类对象时,它只能访问派生类中存在于基类中的虚拟方法。




问题 3

#include
using namespace std;
  
class Test
{
    int value;
public:
    Test(int v = 0) { value = v; }
    int getValue()  { return value; }
};
  
int main()
{
    const Test t;
    cout << t.getValue();
    return 0;
}

输出:编译器错误
在上面的程序中,对象 't' 被声明为一个 const 对象。 const 对象只能调用 const 函数。为了修复这个错误,我们必须让 getValue() 成为一个 const函数。