2016-11-10 155 views
0

考虑一类如下所示:C++使得构造函数的嵌套类

class A { 
    public: 
    // code... 

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

而且我做一个为一些构造,如:

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

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

所以我不知道如何以访问aNum,因为它不直接根据A.

+3

要访问'aNum',您需要一个'A :: B'对象,您尚未声明任何地方。 – aschepler

+0

'B'本身就是一个类,它不是A的子集或依赖关系。使用'class B {'它在哪里,并且完全不在'A'之外的唯一区别就是你引用了类通过'A :: B'而不是':: B'。 (具有相关的访问权限) –

回答

0

由于一些评论状态,你不能只是从A“访问”aNum,因为它是01的一部分。

你要么需要内A创建B对象,并设置在B对象的值或者您需要从B移动aNumA

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

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

    // ... 

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

    B bObj; 
}; 

你应该想一想如果aNum确实是一个嵌套类的一部分,如果你想从A直接访问它。在这种情况下,您的班级设计很可能是错误的,并且aNum确实是A的一部分,而不是B

+0

我会给'B'自己的构造函数初始化'aNum',然后'A'的构造函数可以使用它的初始化列表初始化'bObj':'A(int input):bObj(input ){}' –

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(),它返回objectB,然后通过那个呼叫aNum

0

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

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