關(guān)于頭文件和類外定義
Teacher.cpp里面include了Teacher.h,但是Teacher.h卻沒(méi)有include ?Teacher.cpp那么demo里面include ? include.h 時(shí),用到了Teacher.cpp???
Teacher.cpp里面include了Teacher.h,但是Teacher.h卻沒(méi)有include ?Teacher.cpp那么demo里面include ? include.h 時(shí),用到了Teacher.cpp???
2016-08-31
舉報(bào)
2016-08-31
所有使用了include的地方,你可以理解為將被包含的文件內(nèi)容原樣拷貝到該位置。所以,如果a.cpp在文件頭包含了a.h,然后a.h在文件頭包含a.cpp,那就會(huì)成為一條首尾相銜的蛇,陷入無(wú)限循環(huán)。換句話說(shuō),a.h不能包含a.cpp,完全沒(méi)這個(gè)必要,因?yàn)閍.h沒(méi)有用到a.cpp中的任何東西。
為什么demo里包含了a.h,卻能用上a.cpp里的東西?其實(shí)a.cpp是和main一起被編譯到同一個(gè)project中的,在文件包含關(guān)系上并沒(méi)有體現(xiàn)出來(lái)。demo包含了a.h的話,就能獲得a中所有屬性和方法的定義,便能使用。真正調(diào)用的時(shí)候,用到的是被編譯好的a.cpp的內(nèi)容。
2016-09-01
T.h和T.cpp之間的關(guān)系就是,T.cpp包含了T.h。demo.cpp也包含了T.h,這是OK的。
你的問(wèn)題是,這種情況下,demo.cpp并沒(méi)有和T.cpp發(fā)生直接關(guān)系,怎么能用到T.cpp里的內(nèi)容。我的回答是,他們不是通過(guò)include的方式來(lái)實(shí)現(xiàn)的,而是通過(guò)在同一個(gè)project中編譯來(lái)完成的。T.h就相當(dāng)于是T.cpp的索引,通過(guò)包含T.h,demo.cpp就能在編譯文件中找到T.cpp里的東西了