外部具有动态分配的嵌套类中的类
A class from a nested class outside with dynamic allocation
如何将嵌套类中的类放在c++外部?我想使用动态分配。
这是代码:
class LZWBinTree{
public:
LZWBinTree():tree (&root){}
~LZWBinTree(){
free(root.oneChild());
free(root.zeroChild());
}
void operator<< (char b){
if (b=='0'){
if (!tree->zeroChild()){
Node *uj=new Node('0');
tree->newZeroChild(uj);
tree=&root;
}
else
tree=tree->zeroChild();
}
else{
if (!tree->oneChild()){
Node *new=new Node('1');
tree->newOneChild(new);
tree=&root;
}
else
tree=tree->oneChild();
}
}
void write(void){
depth=0;
write(&root, std::cout);
}
int getDepth(void);
double getAverage(void);
double getDispersion(void);
friend std::ostream &operator<< (std::ostream &os, LZWBinTree &bf){
bf.write(os);
return os;
}
void write(std::ostream &os){
depth=0;
write(&root, os);
}
private:
class Node{
public:
Node(char b='/'):letter(b), leftZero(0), rightOne(0){};
~Node(){};
Node *zeroChild() const{
return leftZero;
}
Node *oneChild() const{
return rightOne;
}
void newZeroChild(Node *gy){
leftZero=gy;
}
void newOneChild(Node *gy){
rightOne=gy;
}
char getLetter() const{
return letter;
}
private:
char letter;
Node *leftZero;
Node *rightOne;
Node(const Node &);
Node &operator= (const Node &);
};
Node *tree;
int depth, averagesum, averagepiece;
double dispersionsum;
LZWBinTree (const LZWBinTree&);
LZWBinTree& operator= (const LZWBinTree&);
void write(Node *element, std::ostream & os){
if(element!=NULL){
++depth;
write(element->oneChild(), os);
for(int i = 0; i<depth; ++i)
os << "---";
os << element->getLetter() << "(" << depth-1 << ")" << std::endl;
write(element->zeroChild(), os);
--depth;
}
}
void free(Node *element){
if(element!=NULL){
free(element->oneChild());
free(element->zeroChild());
delete element;
}
}
protected:
Node root;
int maxDepth;
double average, dispersion;
void rdepth(Node *element);
void raverage(Node *element);
void rdispersion(Node *element);
};
我希望Node类在LZWBinTree类之外。仅仅复制和粘贴它就足够了吗?或者我如何使用动态分配?
您无法从外部访问Node类,因为它在LZWBinTree类别中被声明为私有。如果要使其可访问,请更改访问修饰符。发件人:
private:
class Node{ ...
收件人:
public:
class Node{ ...
一旦你这样做了,你就可以通过它所在的类访问它来创建节点类的实例,如下所示:
LZWBinTree::Node n;
在这种情况下,我不太确定动态分配如何帮助您。
相关文章:
- 筛选嵌套的动态元组(元组的动态元组)
- 如何在C++中分配嵌套的protobuf而不进行复制
- 具有动态数组分配的OpenMP嵌套循环
- 动态大小在C++中的嵌套结构
- 使用嵌套向量动态分配方阵
- C 从嵌套循环中的文件中读取,并将值分配给二维数组
- 堆上是否会分配内存以支持临时对象到常量引用的嵌套绑定
- Openmp:嵌套循环和分配
- 在嵌套的循环中使用变量/动态条件变量
- 分配嵌套 STL 容器时使用哪个分配器
- 嵌套提升.分配“map_list_of”
- 外部具有动态分配的嵌套类中的类
- 正在为嵌套结构指针分配内存
- 动态嵌套循环(C++)
- 针对大型嵌套向量的高效内存分配
- 动态嵌套列表
- 如何创建一个完全动态的嵌套向量
- C++嵌套循环/动态数组E
- 如何为嵌套容器分配内存
- 嵌套向量的动态分配