亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 3519 | 回復(fù): 11
打印 上一主題 下一主題

[低級]C++構(gòu)造函數(shù)問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-10-24 20:15 |只看該作者 |倒序瀏覽
  1. #include <ostream>
  2. #include <iostream>
  3. using namespace std;

  4. class A {
  5.   int a_;

  6.   friend ostream& operator<<(ostream& os, const A& a);

  7. public:
  8.   A() {
  9.     A(1);
  10.   }
  11.   A(int a):a_(a) {
  12.   }
  13. };

  14. ostream& operator<<(ostream& os, const A& a) {
  15.   return os << a.a_;
  16. }

  17. int main(int argc, char *argv[])
  18. {
  19.   A a(1);
  20.   cout << a << "\n";

  21.   A a2;
  22.   cout << a2 << "\n";

  23.   A a3();
  24.   cout << a3 << "\n";

  25.   return 0;
  26. }
復(fù)制代碼
編譯和運行程序的結(jié)果如下:


現(xiàn)有問題如下:
1. 構(gòu)造函數(shù)內(nèi)調(diào)用構(gòu)造函數(shù)是什么意思?
2. 為什么a2和a3輸出的結(jié)果不一樣。

論壇徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16賽季CBA聯(lián)賽之青島
日期:2016-07-05 12:36:0515-16賽季CBA聯(lián)賽之廣東
日期:2016-06-29 11:45:542015亞冠之全北現(xiàn)代
日期:2015-07-22 08:09:472015年辭舊歲徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39獅子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技術(shù)圖書徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [報告]
發(fā)表于 2011-10-24 20:38 |只看該作者
1. 那是臨時匿名對象,
A() {
    A(1);
  }
相當于
A() {
    { A noname(1); }
  }

2. a3是個函數(shù)名稱
A a3();
相當于
A a3( void );
是個函數(shù)聲明

論壇徽章:
0
3 [報告]
發(fā)表于 2011-10-24 21:03 |只看該作者
回復(fù) 2# bruceteen


既然A a3();為函數(shù)聲明,那么為什么 cout << a3 <<"\n" 輸出1呢?

論壇徽章:
0
4 [報告]
發(fā)表于 2011-10-24 21:25 |只看該作者
1. 那是臨時匿名對象,
A() {
    A(1);
  }
相當于
A() {
    { A noname(1); }
  }

bruceteen 發(fā)表于 2011-10-24 20:38


竟然這樣也可以,因為C++不允許在一個構(gòu)造函數(shù)中調(diào)用另一個構(gòu)造函數(shù)。我還以為會報錯……

論壇徽章:
0
5 [報告]
發(fā)表于 2011-10-24 21:34 |只看該作者
回復(fù)  bruceteen


既然A a3();為函數(shù)聲明,那么為什么 cout
sudayly 發(fā)表于 2011-10-24 21:03



    這個好像因為COUT在輸出對象為函數(shù)指針的情況下輸出值就是為1.

論壇徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
6 [報告]
發(fā)表于 2011-10-25 09:17 |只看該作者
竟然這樣也可以,因為C++不允許在一個構(gòu)造函數(shù)中調(diào)用另一個構(gòu)造函數(shù)。我還以為會報錯……
liwangli1983 發(fā)表于 2011-10-24 21:25


你沒看明白吧,A(1)是構(gòu)造一個臨時對象,然后把這個臨時對象扔掉。

C++11允許在構(gòu)造函數(shù)中調(diào)用構(gòu)造函數(shù),但是語法不是這樣的。

論壇徽章:
0
7 [報告]
發(fā)表于 2011-10-25 11:39 |只看該作者
本帖最后由 danssion 于 2011-10-25 11:42 編輯

沒其他提示   

論壇徽章:
0
8 [報告]
發(fā)表于 2011-10-25 11:43 |只看該作者
你沒看明白吧,A(1)是構(gòu)造一個臨時對象,然后把這個臨時對象扔掉。

C++11允許在構(gòu)造函數(shù)中調(diào)用構(gòu)造函 ...
koolcoy 發(fā)表于 2011-10-25 09:17



    3樓說了后明白了,不過沒想到這樣也可以……話說0x的委托構(gòu)造好像g++目前還不支持

論壇徽章:
0
9 [報告]
發(fā)表于 2011-10-25 12:14 |只看該作者
本帖最后由 sudayly 于 2011-10-25 12:17 編輯

回復(fù) 1# sudayly
  1. #include <ostream>
  2. #include <iostream>
  3. using namespace std;

  4. class A {
  5.   int a_;

  6.   friend ostream& operator<<(ostream& os, const A& a);

  7. public:
  8.   A() {
  9.     A(1);
  10.   }
  11.   A(int a):a_(a) {
  12.   }
  13.   int GetA() {
  14.     return a_;
  15.   }
  16. };

  17. ostream& operator<<(ostream& os, const A& a) {
  18.   return os << a.a_;
  19. }

  20. int main(int argc, char *argv[])
  21. {
  22.   A a(1);
  23.   cout << a << "\n";
  24.   cout << a.GetA() << "\n";

  25.   A a2;
  26.   cout << a2 << "\n";
  27.   cout << a2.GetA() << "\n";

  28.   A a3();
  29.   cout << a3 << "\n";
  30.   //  cout << a3.GetA() << "\n"; // compile error
  31.   return 0;
  32. }
復(fù)制代碼
按照樓上的提示,重新寫了下該代碼,得到以下結(jié)果
1. A a3();是個函數(shù)聲明,因為a3.GetA()編譯會出錯。
2. A() { A(1);  }中創(chuàng)建了個臨時對象,在作用域后該對象就釋放了,但是在A()中并沒有初始化成員變量a_,怎么a_的值為0呢?編譯器會自動初始化類的成員變量的值?

論壇徽章:
0
10 [報告]
發(fā)表于 2011-10-25 12:22 |只看該作者
加個 這個  你就知道為何是 0 了

int i;
  cout << i << "\n";
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP