2

据我所知,引用在其生命周期内只能引用一个对象。但是,下面的代码可以正确编译。虽然我已经更改了引用的对象。输出是:1。它如何正确编译?

谢谢石然

class A{
 private:
int a;
 public:
A(int a):a(a){}
virtual ~A(){}
virtual void f()const {cout<<a<<endl;}
};
class B: public A{
 private:
int b;
 public:
B(int Ina,int Inb):A(Ina),b(Inb){}
virtual void f()const {cout<<b<<endl;}
};

int main(){
    B b(1,2);
    A a(5);
    A& ref=a;
    ref=b;
    ref.f();
    return 0;
}
4

3 回答 3

3

正确的思考方式是引用它引用的对象。因此,如果您这样做:

A& ref = a;
ref = b;

因为ref is a,你正在做的是:

a = b;
于 2013-01-31T16:06:37.807 回答
1

引用在其整个生命周期中仅引用一个引用。
您的代码所做的是将新值分配给原始参考对象。

于 2013-01-31T16:04:44.127 回答
0

您的主要功能相当于:

B b(1,2);
A a(5);
a = b;
a.f();

分配给引用等同于分配给原始对象。

于 2013-01-31T16:04:51.117 回答