gpt4 book ai didi

c++ - 从多个派生类返回一个函数

转载 作者:太空狗 更新时间:2023-10-29 23:07:14 25 4
gpt4 key购买 nike

我有一个基类和多个派生类。每个派生类都有一个构造函数,它接受在基类中初始化的参数。所有的构造函数都是不同的,但是它们都接受一个公共(public)参数,我们称它为Name

有没有一种方法可以让我以更短的方式显示每个派生类的名称,而不是一个接一个地调用它们?

这是一个例子。假设我的基类是 Father,我的派生类是 Brother, Sister, HalfBrother, HalfSister 这是我的驱动程序文件:

cout << Brother::Brother().getName() << endl
<< Sister::Sister().getNAme() << endl
<< HalfBrother::HalfBrother().getNAme() << endl
<< HalfSister::HalfSister().getName() << endl;

这会很好地返回它们,但是有没有一种更简单的方法可以做到这一点,这样我就可以从所有派生类中获取所有名称,而不必一一编写?

最佳答案

您可以创建类的静态注册表,并从您插入到要注册的类中的静态成员的构造函数填充它。

在标题中:

class Registration {
static vector<string> registered;
public:
static void showRegistered() {
for (int i = 0 ; i != registered.size() ; i++) {
cout << registered[i] << endl;
}
}
Registration(string name) {
registered.push_back(name);
}
};

在 CPP 文件中:

vector<string> Registration::registered;

有了这个类,你可以这样做:

在标题中:

class A {
static Registration _registration;
};

class B {
static Registration _registration;
};

class C {
static Registration _registration;
};

在 CPP 文件中:

Registration A::_registration("quick");
Registration B::_registration("brown");
Registration C::_registration("fox");

这最后一部分是关键:静态 _registration 的声明变量有副作用——它们将名称插入到 vector<string> registered 中的 Registration类,没有特定的顺序。您现在可以检索名称、将它们打印出来,或者对它们做任何您想做的事情。我添加了一个用于打印的成员函数,但显然你不受它的限制。

这是一个demo on ideone - 它打印

quick
brown
fox

关于c++ - 从多个派生类返回一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13337847/

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