gpt4 book ai didi

c++ - 类型转换问题

转载 作者:行者123 更新时间:2023-11-28 00:54:48 26 4
gpt4 key购买 nike

假设您有基类 Unix_tree,以及派生类 Unix_tree_type1Unix_tree_type2 等等。为什么我不能将 Unix_tree 转换为 Unix_tree_type...?有没有办法执行这样的类型转换?派生类包含抽象方法的实现,它们的目标是以不同的方式打印基类中包含的数据。谢谢。

class Unix_tree
{
public:
Unix_tree ()
{
tree_it.tree = &tree;
}

Unix_tree(const Unix_tree& utree) : num_of_files(utree.num_of_files), tree(utree.tree), tree_it(utree.tree_it)
{
tree_it.tree = &tree;
};

int num_of_files;
map<int, pair<int, string> > names;
vector<pair<int, int> > edges;

Tree< pair<int, string> > tree;
TreeIterator< pair<int, string> > tree_it;

string input_format;
string output_format;

static Unix_tree* load_tree(istream& input_info);
void load_names(istream& input_info);
void load_tree_nodes(vector<int>& levels);
Unix_tree* convert(string format);

virtual void load(istream& input_info) = 0;
virtual void print_function(const Tree<pair<int, string> >* node, const vector<bool>& visited ) = 0;
void print_tree();
};


class Unix_tree_type1 : public Unix_tree
{
public:

void load(istream& input_info);
void print_function(const Tree<pair<int, string> >* node, const vector<bool>& visited);
};

最佳答案

你可以施放指针,所以:

Unix_tree *p = ...;
Unix_tree_type1 *q = (Unix_tree_type1*)p;

但我认为你不想那样做。方法调用会自动执行您想要的操作,因此:

Unix_tree *p = ...; // points to an instance of Unix_tree_type1
p->load(...); // calls Unix_tree_type1::load, not Unix_tree::load

关于c++ - 类型转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12080632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com