在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
