C++赋值号能否被继承

2014-11-24 12:36:30 · 作者: · 浏览: 0

C++中,普通函数能够被继承,但是析构函数和构造函数不能被继承。这里有个问题,C++赋值号能否被继承?

看以下代码:

#include

using namespace std;

class A{

public:

A() {

a = 0;

cout<<"A::A()"<

}

A & operator =(A &aa) {

cout<<"A:="<

this->a = aa.a;

return *this;

}

int a;

};

class B:public A{

public:

B() {

i=1;

cout<<"B::B()"<

}

public:

int i;

};

int main(void){

A a, b;

a.a = 100;

b.a = 200;

a = b;

cout<

B b1, b2;

b1.a = 1;

b1.i = 10;

b2.a = 2;

b2.i = 20;

cout <<"***************"<

b1 = b2;

cout<<"b1.a: "<

return 0;

观察输出结果:

\

可以看到没有出错,调用的是A类的重载赋值号方法,而且赋值成功。按理说A类只对A的属性进行赋值号重载,返回A对象,B类的属性应该没有值才对。这是为什么呢?原因是系统自动生成了赋值符号,即使B类没有对赋值号重载,一样可以赋值成功。

我们再在类B内对赋值号进行重载,代码如下:

B& operator =(B &bb){

cout<<"B:="<

this->a = bb.a;

this->i = bb.i;

return *this;

}

再观察输出结果:

\

此时调用的是B类的重载赋值号方法

作者 Wentasy