C ++为嵌套类制作构造函数

时间:2016-11-10 00:25:37

标签: c++ class constructor

考虑一个类如下:

class A {
    public:
    // code...

    private:
    class B {
        public:
        int aNum;
        // ...
    }
}

我要为A制作一些构造函数,例如:

A::A() { } // default...

A::A(int input) { /* code... */ }

所以我想知道如何访问aNum,因为它不是直接在A下。

3 个答案:

答案 0 :(得分:0)

正如一些评论所述,您不能仅仅从aNum“访问”A,因为它是B的一部分。

您需要在B中创建A对象,并在B对象中设置值,或者您需要将aNumB移至A

如果您在B内创建A对象,则会看起来像这样。

struct A {
    A(int input) {
        bObj.aNum = input;
    }

    // ...

private:
    struct B {
        int aNum;
        // ...
    };

    B bObj;
};

如果您想直接从aNum访问A,那么您应该考虑aNum是否真的是嵌套类的一部分。在这种情况下,您的班级设计很可能是错误的,A实际上是B而非{{1}}的一部分。

答案 1 :(得分:0)

就像你班上有任何数据成员一样,没有什么不同

class A {
    public:
    // code...

    private:
    class B {
        public:
        int aNum;
    }
}

在您可以访问类aNum的非静态数据成员B之前,您必须创建类似B类型的对象:

class A
{
    public:
        const B& getObjectB() const { return objectB; }; 
    private:
        B objectB;
}

你可以这样做:

A objectA;
objectA.getObjectB().aNum;

这里发生的事情是我们调用返回getObjectB()的{​​{1}},然后通过该电话调用objectB

答案 2 :(得分:0)

A需要某种方式来引用类型B的对象,这是一个简单的例子。

class A {
    private:
        class B {
        public:
            int aNum;
        };
        B b;
    public:
        A(int);
};
A::A(int input) {
    b.aNum = input;
}