有這樣兩個類,分別爲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;
}
運行結果
更多幹貨,砸門有緣再說。