繁体   English   中英

c ++继承,构造函数真正的调用者

[英]c++ inheritance, constructor real caller

我有A班:

class A
{
    A(const String& name)
    {
        doSomething1();
    }
}

我也有B班

class B : A
{
    B(const String& name): A(name)
    {
        doSomething2();
    }
}

因此,如果我调用B(),它也将调用A(),它将导致2x调用doSomething()。 有没有办法如何在A`s构造函数中发现它被直接调用: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;
}

http://ideone.com/jj8Df1

通过利用构造函数的可见性,您可以将其他信息传递给基类。 否则,我建议使用稍微修改过的CRTP ,使您的基类知道对象本身(它们成为一个完全不同的实体)。

你可以有两个doSomething重载如下,但......

void doSomething(A*);
void doSomething(B*);

在通话网站上,您可以:

doSomething(this);

thisA*B*所以它会调用相应的函数。)

class A
{
    A(const String& name)
    {
        doSomething(this);
    }
}

class B : A
{
    B(const String& name): A(name)
    {
        doSomething(this);
    }
}

但是 ,正如其他人在评论中所说,你有一个设计问题!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM