他クラスのコンストラクタで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();
}
}
IS-A 関係ではなく HAS-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()はプライベートになります