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

杜尚·帕拉瓦克(Dusan Plavak)

我有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()

马克·A

通常,无法从基类中发现您要引用的对象是否是派生类型。

无论如何,您的设计很可能存在缺陷,类似的事情也可能起作用:

#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,以使您的基类了解对象本身(它们成为整个不同的实体)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据调用者的决定返回值的c函数

来自分类Dev

根据调用者的决定返回值的c函数

来自分类Dev

如何在vi / vim中的C代码中查找函数的调用者和被调用者?

来自分类Dev

在C中,被调用函数可以使调用者函数返回吗?

来自分类Dev

C ++构造函数继承

来自分类Dev

继承的C ++构造函数

来自分类Dev

C ++隐式和显式继承构造函数调用

来自分类Dev

使用C ++在虚拟继承期间调用构造函数

来自分类Dev

C ++继承:在标头中调用基类构造函数

来自分类Dev

C ++继承:避免调用基类的默认构造函数

来自分类Dev

在C ++中,函数的调用者可以确保其参数不会被修改吗?

来自分类Dev

在C ++中,函数的调用者可以确保其参数不会被修改吗?

来自分类Dev

c ++:继承构造函数,但通过编辑构造函数中调用的方法进行更改

来自分类Dev

构造函数和继承C ++

来自分类Dev

C ++构造函数调用

来自分类Dev

C ++-构造函数调用构造函数

来自分类Dev

C++ 为 Struct 及其继承的成员调用默认构造函数

来自分类Dev

C#如何从默认构造函数继承

来自分类Dev

非默认构造函数的C ++继承

来自分类Dev

C ++ 11-构造函数继承

来自分类Dev

c++ 只继承公共构造函数

来自分类Dev

如何编写一个日志记录函数或宏,该函数或宏可以将调用者的姓名附加到C语言中的日志记录输出中

来自分类Dev

C ++ 11构造函数继承和不带参数的构造函数

来自分类Dev

未调用C ++构造函数

来自分类Dev

C ++不同的构造函数调用

来自分类Dev

C ++构造函数未调用

来自分类Dev

C ++调用线程构造函数

来自分类Dev

调用父构造函数C ++

来自分类Dev

如何从C文件调用C ++构造函数

Related 相关文章

热门标签

归档