我想在其他类
的构造函数中调用A类中的方法 我用谷歌搜索,但没有找到任何答案 例如,我有:class A{
void doWork();
}
class B{
B(){
//here i want to have doWork method
}
}
答案 0 :(得分:4)
你告诉我们不足以选择合适的解决方案。一切都取决于你想要达到的目标。一些解决方案:
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();
}
}
由于您提供的数据不足,您必须自行选择解决方案。
答案 1 :(得分:3)
为了使它能够工作,你需要将它子类化。
所以它就像这样:
class A {
doWork();
}
class B : A {
B(){
doWork();
}
}
你也可以像HAS-A而不是IS-A关系一样:
class A {
doWork();
}
class B {
A myA;
B(){
myA.doWork();
}
}
在不了解您正在做的事情的情况下,我会选择顶级(IS-A)解决方案,这是我认为您正在尝试做的事情。
答案 2 :(得分:1)
或者
class A
{
public:
static void doWork();
};
class B
{
B(void)
{
A::doWork();
}
};
PS:这里B :: B()将是私人的