从另一个子类中的子类调用函数

时间:2014-12-08 16:37:24

标签: c++ inheritance

考虑一个具有两个子类的超类,每个子类都有不同的用途。

class SuperClass
{
    public:

        // Some functions using SubClass1 and SubClass2
};

class SubClass1 : public SuperClass
{
    public:

        SubClass1() // Default constructor
        {
            // Initialize an instance of SubClass1
        }
    private:
        // Some variables
};

class SubClass2 : public SuperClass
{
    public:

        SubClass2() // Default constructor
        {
            // Initialize an instance of SubClass2 with an instance of SubClass1
        }
    private:
        // Some variables
};

如何在SubClass2中创建SubClass1类型的成员变量,即在SubClass2中调用SubClass 1的默认构造函数?

3 个答案:

答案 0 :(得分:1)

你必须在SubClass2中提供转换构造函数,它接受SubClass1对象。即

SubClass2(const SubClass1& x)
{
    //initialization
}

答案 1 :(得分:1)

SubClass1SubClass2视为两个不相关的类。他们有一个共同的父母这一事实并不会让你感兴趣。您只需使用任何其他对象创建实例:

class SubClass2 : public SuperClass
{
public:

    SubClass2() // Default constructor
    {
    }

private:
    SubClass1 class1_; // The correct default constructor will be called automatically
};

即使SubClass1没有默认构造函数,您仍然可以将其初始化为公共成员对象:

class SubClass2 : public SuperClass
{
public:

    SubClass2() :
        class1_(...) // Initialize as any other member
    {
    }

private:
    SubClass1 class1_; // Assume it doesn't have a default constructor
};

答案 2 :(得分:1)

与显示的代码进行比较的问题有点模棱两可,但如果您想在每个SubClass1实例中使用类型SubClass2的实例变量,那么您只需执行以下操作:

class SubClass2 : public SuperClass
{  public:
     SubClass2 : sub1() {}
   private:
     SubClass1 sub1;
};

相反,如果您希望能够从现有SubClass2实例初始化SubClass1实例,请参阅@ravi的答案 - 您只需要一个转换构造函数。

如果这是你要追求的其他东西,那么请澄清......