[C++]前置聲明和標頭檔

來源:互聯網
上載者:User
from 
http://blog.csdn.net/fallstones/article/details/6266632


[C++]前置聲明和標頭檔

分類: C++2011-03-22 00:13 199人閱讀 評論(0) 收藏 舉報看完《Effective C++》條款31有感。。假設有一個Date類Date.h [cpp] view plaincopyclass Date { private: int year, month, day; }; 如果有個Task類的定義要用到Date類,有兩種寫法其一Task1.h [cpp] view plaincopyclass Date; class Task1 { public: Date getData(); }; 其二Task2.h [cpp] view plaincopy#include "Date.h" class Task2 { public: Date getData(); }; 一個採用前置聲明,一個採用#include<Date.h>加入了Date的定義。兩種方法都能通過編譯。但是 Task1.h 這種寫法更好。如果Date.h 的 private 成員變數改變,比如變成 double year, month, day; ,Task1.h 不需要重新編譯,而 Task2.h 就要重新編譯,更糟的是如果 Task2.h 還與其他很多標頭檔有依賴關係,就會引發一連串的重新編譯,花費極大的時間。可是事實上改變一下寫法就可以省去很多功夫。所以能用前置聲明代替#include 的時候,盡量用前置聲明有些情況不能用前置聲明代替#include比如Task1.h改成 [cpp] view plaincopyclass Date; class Task1 { public: Date d; }; 會編譯錯誤,因為Date d定義了一個Date類型變數,編譯器為d分配記憶體空間的時候必須知道d的大小,必須包含定義Date類的Date.h檔案。這是可以採用指標來代替 [cpp] view plaincopyclass Date; class Task1 { public: Date *d; }; 指標的大小是固定的。在32位機上是4位元組,64位機上是8位元組。這時編譯Task1的時候不需要Date的大小,所以和Date的定義無關。何時可以用前置聲明代替#include(http://blog.csdn.net/rogeryi/archive/2006/12/12/1439597.aspx)上述例子可以說明如果使用object reference 或 object point 可以完成任務,就不要用object這樣可以盡最大可能避免#include from http://blog.csdn.net/fallstones/article/details/6266632為聲明式和定義是提供不同的標頭檔 在函數庫的設計過程中,介面的設計就要遵循上述準則。一個介面的標頭檔是這樣的interface.h [cpp] view plaincopyclass Date; class Address; class Email; Date getDate(); 如果客戶只用到Date類,編譯器就只會去編譯Date.h,而不去編譯Address.h,Email.h 等等檔案。

 

 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.