第12周 《C++語言基礎》程式閱讀——多重繼承(5)

來源:互聯網
上載者:User

標籤:

問題描述:

(5)閱讀下面類的定義,請說出在測試函數中不同情況的調用產生的結果  
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#ff6666;"><strong>#include <iostream>using namespace std;class A{protected:    int a,b;public:    A(int aa, int bb):a(aa), b(bb) {}    void printA()    {        cout<<"a: "<<a<<"\tb: "<<b<<endl;    }};class B: public A{    int c;public:    B(int aa, int bb, int cc):A(aa,bb),c(cc) {}    void printB()    {        cout<<"a: "<<a<<"\tb: "<<b<<"\tc: "<<c<<endl;    }};int main(){    A a(1,1);    B b(2,3,4);    //此處加入下面各小題中的代碼    return 0;}</strong></span>

(a)
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#ff6666;"><strong>    a=b;    a.printA();    b.printA();    b.printB();</strong></span>
你認為輸出結果是: a: 2    b:3 a: 2    b:3 a: 2    b:3    c:4 運行程式的結果是:   (b)
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#ff6666;"><strong>    b=a;    a.printA();    b.printA();    b.printB();</strong></span>
程式會發生編譯錯誤,原因是:b繼承於a,b的資料成員包含但不等於a的資料成員。
記錄下IDE中提示的錯誤並理解:

(c)  
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#ff6666;"><strong>    A &r1=a;    A &r2=b;    r1.printA();    r2.printA();    r2.printB();</strong></span>
將會發生錯誤的一行刪除;
對餘下的程式,你認為輸出是:
a: 1    b:1 a: 2    b:3 實際啟動並執行輸出是: 那一行的錯誤原因是:A &r2=b; r2是A的對象無法使用B的成員函數。
(d)
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#ff6666;"><strong>    A *p=&a;    p->printA();    p=&b;    p->printA();    p->printB();</strong></span>
將會發生錯誤的一行刪除;
對餘下的程式,你認為輸出是:
a: 1    b:1 a: 2    b:3
實際啟動並執行輸出是:那一行的錯誤原因是:p是一個指向A對象的指標,因為B繼承A所以可以執行 p=&b;p->printA();但是A中沒有printB();所以p->printB();錯誤無法執行。 (e)
在class A中增加成員函數:
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#ff6666;"><strong>    int getA(){return a;}</strong></span>
在main函數前增加一般函數:
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#ff6666;"><strong>void f(A x){    cout<<"aaaaah, my a: "<<x.getA()<<endl;}</strong></span>
main函數中指定部分為:
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#ff6666;"><strong>    f(a);    f(b);</strong></span>
你認為輸出結果是: aaaaah, my a: 1 aaaaah, my a: 2 運行程式的結果是:

第12周 《C++語言基礎》程式閱讀——多重繼承(5)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.