C++類與文件包含

有這樣兩個類,分別爲Parent 與 Child 。
想要做到這樣一個效果:

class Parent
{
public:
void childDemo(Child* child);		// 接收一個子類
}
/*---------------------------------------------------------------------------*/
class Child
{
public:
    Parent parent;			// 子類擁有父類作爲一個成員
};

他們有4個文件分別爲:
Parent.h Parent.cpp
Child.h Child.cpp

通常而言,我們不能在在類A包含了類B之後,類B還能在包含類A。

以下是錯誤演示,無法通過編譯:


// 文件1
#include"parent.h"

class Child
{
public:
    Parent parent;
};

// 文件2
#include"child.h"
class Parent
{
public:
    void childDemo(Child* child);
};

還是廢話少說,直接上正確的操作。

Child類的 .h文件與.cpp文件

// .h
#ifndef CHILD_H
#define CHILD_H
#include"parent.h"

class Child
{
public:
    Child();
    void demo();
public:
    Parent parent;
};
#endif // CHILD_H

// .cpp
#include "child.h"
#include<iostream>
using namespace std;
Child::Child()
{
}
void Child::demo()
{
   cout << "hello Child" << endl;
}

Parent類的 .h文件 .cpp文件

// .h
#ifndef PARENT_H
#define PARENT_H

class Child;			// 在這裏聲明一個 Child 只有這裏聲明之後,才能定義這個類的指針

class Parent
{
public:
    Parent();
    void demo();
    void childDemo(Child* child);		
};
#endif // PARENT_H

// .cpp
#include "parent.h"
#include<iostream>
#include"child.h"		// 這個是重點,在.cpp 文件中包含 Child類的頭文件

using namespace std;

Parent::Parent()
{
}
void Parent::demo()
{
    cout << "hello Parent" << endl;
}
// 這裏就可以使用Child這個類了
void Parent::childDemo(Child *child)
{
    child->demo();
}

main主文件

#include <iostream>
#include"child.h"

using namespace std;

int main()
{
    Child child;
    child.parent.demo();		// 打印父類
    child.parent.childDemo(&child);			// 通過父類的接口傳入子類,打印子類
    return 0;
}

運行結果
run

更多幹貨,砸門有緣再說。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章