已采納回答 / weixin_慕村4306521
circle的類定義內,構造函數內coordinate *m_p=new coordinate(3,5);與數據成員中coordinate *m_p;矛盾,不妨改為如下,這樣隨著對象的解構,自動進行coordinate的析構函數class circle:public shape{public:circle(double r):m_p(3,5){m_r=r;cout<<"circle"<<endl;}virtual ~circle(){cout<<"~circle"<...
2020-02-28
已采納回答 / 我入戲太深
因為throw拋出來的東西就是一個string類型的“除數不能為0"這個字符串。你的第一種寫法catch(string),只要是拋出來的字符串都能夠捕獲到,但是你在打印的時候你只能通過【cout<<"除數不能為0"<<endl;】打印出來, 因為你沒有一個指針來接受你字符串內容。而用catch(string &e),捕獲的時候e會指向“除數不能為0”這個字符串的地址,因此在打印的時候只需要【cout<<e<<endl】;就可以把“除數不能為0”這句話...
2020-02-25
已采納回答 / 小程序魔王
主要是可以優化代碼,比如函數的參數類型可以寫成父類Person,這樣你傳一個Farmer或Worker,函數都可以運行,但是如果你要是把函數的參數類型寫成Farmer,那Worker就是類型不匹配,你還要再寫一個參數類型為Worker的函數,也就是說你得寫兩個具有相同功能的函數,但是如果你把參數類型寫成父類,那只需要寫一個函數就可以了
2019-05-29
已采納回答 / no4990
就算改成private都可以,這個老師用的指針p不是Circle類的指針,而是int指針,所以不受訪問限定符的限定。你可以用下面的代碼來看,p1是Circle類的指針,p2是int指針。<...code...>
2019-05-07
已采納回答 / 慕圣1012934
不加是新在函數內新創建了一個臨時變量,接收了throw傳過來的值(1.1),如果加了&,就會把1.1的引用傳過來,之后a就相當于1.1的別名,就不用重新創建臨時變量,因為a就是throw那里的1.1,可以節省一些系統資源。
2019-03-10
已采納回答 / DeceiverY
一個類同時被兩個或以上的類繼承時,在實例化子類的同時,會造成父類的多次定義即父類被重復定義;而宏定義就是為了解決類的重復定義,當實例化子類時,對父類的定義會通過宏定義做出判斷,如果沒有定義就可以直接定義,如果已經定義,就會跳過。
2019-03-05
已采納回答 / DeceiverY
父類Car ,子類Bus,,,通過Car *p = new Bus;實例化對象后,其中的p為Car類型的指針,而*p則為Bus類型的對象,用p->所指向的就是子類的數據成員或者成員函數,而用p->Car::才為父類的
2019-03-05