我想在其他类的构造函数中从 A 类调用一个方法
我用谷歌搜索,但没有找到任何答案例如,我有:
class A{
void doWork();
}
class B{
B(){
//here i want to have doWork method
}
}
我想在其他类的构造函数中从 A 类调用一个方法
我用谷歌搜索,但没有找到任何答案例如,我有:
class A{
void doWork();
}
class B{
B(){
//here i want to have doWork method
}
}
您告诉我们选择合适的解决方案还不够。一切都取决于您要达到的目标。几个解决方案:
a) 将方法标记为静态。
class A
{
public:
static void DoSth()
{
// Cannot access non-static A members here!
}
};
class B
{
public:
B()
{
A::DoSth();
}
};
b) 您可以就地实例化 A
class A
{
public:
void DoSth()
{
// Do something
}
};
class B
{
public:
B()
{
A a;
a.DoSth();
}
};
c) 您可以将 A 的实例放入 B:
// A remains as in b)
class B
{
private:
A a;
// or: A * a;
public:
B()
{
a.DoSth();
// or: a = new A; a->DoSth();
// Remember to free a somewhere
// (probably in destructor)
}
}
d) 你可以从 A 推导出 B:
class A
{
protected:
void DoSth()
{
}
};
class B : public A
{
public:
B()
{
DoSth();
}
};
e) 你可以忘记 A 类,让 DoSth 成为一个函数:
void DoSth()
{
// ...
}
class B
{
public:
B()
{
DoSth();
}
}
由于您提供的数据不足,您必须自己选择解决方案。
为了使它起作用,您需要对其进行子类化。
所以它会是这样的:
class A {
doWork();
}
class B : A {
B(){
doWork();
}
}
您也可以像这样进行 HAS-A 而不是 IS-A 关系:
class A {
doWork();
}
class B {
A myA;
B(){
myA.doWork();
}
}
在不了解您在做什么的情况下,我会选择顶级(IS-A)解决方案,这就是我认为您正在尝试做的事情。
或者
class A
{
public:
static void doWork();
};
class B
{
B(void)
{
A::doWork();
}
};
?
PS:这里 B::B() 将是私有的