程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 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; 

    }   

 

 

再觀察輸出結果:

 

\

 

此時調用的是B類的重載賦值號方法

 

作者 Wentasy

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved