1
正如您可能已經從標題中注意到的那樣,我具有不同的類,特別是3,並且每個類都響應不同的樹實現。對於包含在主C++中的不同類的相同功能
在Tree1.h
class Tree1 {
public:
struct node{
char label;
node* nHMI_ptr;
node* nHD_ptr;
};
node* root;
Tree1();
~Tree1();
bool Empty();
Tree1::node& Root();
void AddSon(int i, node &n, char l);
/*
*
* (other functions)
*/
}
在Tree2.h
class Tree2 {
public:
struct node{
char label;
node* nHMI_ptr;
node* nHD_ptr;
node* nFather_ptr;
node* nHI_ptr;
};
node* root;
Tree2();
~Tree2();
bool Empty();
Tree2::node& Root();
void AddSon(int i, node &n, char l);
/*
*
* (other functions)
*/
}
在Tree3.h
class Tree3{
public:
Tree3();
~Tree3();
struct node;
struct nodeSon{
struct node* node_ptr;
nodeSon* nextNodeSon_ptr;
};
struct node{
char label;
node* nextNode_ptr;
struct nodeSon* nSon;
};
node* root;
bool Empty();
Tree3::node& Root();
void AddSon(int i, node &n, char l);
/*
*
* (other functions)
*/
}
正如你可以看到他們具有相同的名稱下的功能和成員或標識符。這是因爲我想使用這個函數來製作各種更復雜的算法,但棘手的部分是我想使這個algortihms獨立於所使用的類。我想到的第一件事是在我的main.cpp上創建這個算法。
在main.cpp中
#include <cstdlib>
#include <iostream>
#include "Tree1.h"
//#include "Tree2.h"
//#include "Tree3.h"
void someFunc(node n) {
//do something by calling Tree functions
//E.g. call Empty(), call AddSon(...)
}
int main(int argc, char** argv) {
return 0;
}
什麼我想才達到的是,someFunc(...)適用於所有的樹木,而無需改變任何基礎代碼和剛剛enabiling的#之一包括和禁用另外兩個。
- 是否可以做到這一點?
- 我該如何做到這一點?
DR; TL;使用模板來創建'someFunc'的通用版本。 – 101010
也可以有各種樹類繼承自純虛擬類BaseTree,它定義了所有常見的樹功能,然後調用'void someFunc(BaseTree&tree,node n)' – user4581301
@ user4581301 Nope。 '節點'不能在運行時推導出來,除非它已經在基類中聲明瞭。 –