当前位置:编程学习 > C/C++ >>

C++赋值号能否被继承

 

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

    看以下代码:

 

 

#include <iostream> 

 

using namespace std; 

 

class A{ 

public: 

    A() {  

        a = 0; 

        cout<<"A::A()"<<endl;  

    }      

 

    A & operator =(A &aa)   { 

        cout<<"A:="<<endl; 

        this->a = aa.a; 

        return *this; 

    } 

    int a; 

}; 

class B:public A{ 

public: 

    B() { 

        i=1; 

        cout<<"B::B()"<<endl; 

    } 

    public: 

    int i; 

};  

 

int main(void){ 

 

    A a, b; 

    a.a = 100; 

    b.a = 200; 

    a = b; 

    cout<<a.a<<endl; 

 

     

    B b1, b2; 

    b1.a = 1; 

    b1.i = 10; 

    b2.a = 2; 

    b2.i = 20; 

    cout <<"***************"<<endl; 

    b1 = b2; 

    cout<<"b1.a: "<<b1.a<<" "<<"b1.i "<<b1.i<<endl; 

    return 0; 

 

观察输出结果:   

 

 

 

\

 

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

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

 

 

 

B& operator =(B &bb){ 

        cout<<"B:="<<endl; 

        this->a = bb.a; 

        this->i = bb.i; 

 

        return *this; 

    }   

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,