我有A班:
class A
{
A(const String& name)
{
doSomething1();
}
}
我也有B班
class B : A
{
B(const String& name): A(name)
{
doSomething2();
}
}
因此,如果我调用B(),它将同时也调用A(),并且将产生2次调用doSomething()的结果。有什么办法可以发现在A的构造函数中直接被调用为:A(),而在间接调用时则被称为B()?
谢谢
编辑:好吧,这与doSomething()方法不同,它更像doSomething1()和doSomething2(),但我想调用最外部的函数,因此,如果A具有doSomething1()和B doSomething2(),则在调用B( )我只想执行doSomething2()
通常,无法从基类中发现您要引用的对象是否是派生类型。
无论如何,您的设计很可能存在缺陷,类似的事情也可能起作用:
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
A(const string& name)
{
doSomethingFromA();
}
void doSomethingFromA() {
cout << "called from A" << endl;
};
protected:
A(const string& name, bool fromB)
{
doSomethingFromB();
}
void doSomethingFromB() {
cout << "called from B" << endl;
};
};
class B : public A
{
public:
B(const string& name): A(name, true)
{
}
};
int main() {
A obj1("str");
B obj2("str");
return 0;
}
通过利用构造函数的可见性,您可以将其他信息传递给基类。否则,我建议您使用稍微修改过的CRTP,以使您的基类了解对象本身(它们成为整个不同的实体)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句