我有以下代码:
class A
{
int x;
public:
A(int i=25) { x=i; }
int& f() const { return x; }
};
int main()
{
A a(15);
cout<<a.f();
return 0;
}
我收到一条错误消息,说我无法从const int类型的表达式初始化int&类型的引用?如果我修改函数的 f() 标头,例如“ int f() const ”或“ int& f() ”,它就可以工作。我知道 const 函数不能修改类的成员,但在我的示例中,这并没有发生,并且仍然是我无法理解的错误。
其次,我有这段代码:
class B { /* instructions */ };
class D1: virtual B { /* instructions */ };
class D2: virtual B { /* instructions */ };
class D3: B { /* instructions */ };
class D4: private B { /* instructions */ };
class D5: virtual public B { /* instructions */ };
class M1: D1, public D2, D3, private D4, virtual D5
{ /* instructions */ };
class M2: D1, D2, virtual D3, virtual D4, virtual D5
{ /* instructions */ };
问题是 B 在 M1 和 M2 中继承了多少次。我认为两者的答案都是 3(首先来自 D1,然后来自 D3,然后来自 D4),但我不确定。我对吗?