感謝:https://blog.csdn.net/u010757264/article/details/50075343
在C++程序設計過程中,一般將類的聲明、類的定義分開, 將類的聲明放在.h的頭文件中, 將類的定義放在.cpp的源文件中,這樣使得程序設計模塊分明。
但是往往會出現典型問題:重復定義問題。如果一個類派生出一個類,派生類聲明時需要包含基類的頭文件,如果再在主函數包含這個頭文件, 編譯時就報錯, 編譯器出現重復定義的問題, 給出重定義錯誤提示。
例子:首先在新建工程下新建兩個.h的頭文件(文件名分別為people.h和student.h),繼續新建三個.cpp的源文件(文件名分別是people.cpp、student.cpp、main.cpp),然后編輯相應代碼。
// people.h頭文件
#include<iostream>
using namespace std;
class people{
public:
void breath();
};
// student.h 頭文件 // 定義一個類student,從類people繼承得到,重寫成員函數breath()
#include "people.h"
#include<iostream>
using namespace std;
class student:public people{
public:
void breath();
}
// people.cpp源文件 // 定義類people的breath()方法
#include "people.h"
void people:breath(){
cout <<"people" << endl;
}
// student.cpp源文件 // 重寫類student的breath()方法
#include "student.h"
void student:breath(){
cout << "student" << endl;
}
// main.cpp 源文件
#include "pepple.h"
#include "student.h"
int main(){
people p;
student s;
p.breath();
s.breath();
return 0;
}
對三個cpp進行編譯,對於people.cpp和student.cpp編譯時,沒有錯誤,但是對main.cpp進行編譯時會出現類重復定義錯誤。因為"people.h"被定義了兩次,編譯器會報錯。
對於輕量程序,通過將所有代碼寫在一個源文件中,包括類的聲明和定義,還有主函數,這樣不用寫#include "people.h"和#include "student.h"。但是對於大程序,這種方式不好,因為不僅會讓代碼顯得冗長而且代碼邏輯沒有條理。
因此,對於這種情況,最常用的方法是用條件編譯#ifndef...#define...#endif語句。修改上面people.h和student.h文件。