2012-10-18 34 views
-1

假设我们有一个两个班指向的返回值

class A 
{ 
    public: 
     Course (int num) ; 
     int getAnum(); 

     int num; 
} 


A::A(int num) 
{ 
    this->num = num; 
} 

int A::getAnum() 
{ 
    return this->num; 
} 

,并在主

A* a = new A(12); 
B* b = new B(a); 

其他类

class B 
{ 
    public: 
     B (A * a = NULL); 
     A * getA();  
    A * a; 
} 


B::B(Course * a) 
{ 
    this->a = new A; 
    this->a = a; 
} 
A * B::getA() { return this->a; } 

,问题是我怎么能打印号码

cout << b.getA->getAnum(); 

cout <<b.a->getAnum(); 

哪一个是正确的?我可以通过返回值指向另一个函数吗?这两个代码示例中会发生什么?为什么?请不要注意语法错误。对不合适的代码和糟糕的英语感到抱歉。谢谢你的回答:)

+0

代码段中有多少个编译错误! – 2012-10-19 00:00:07

+0

@Desolator:我数四。你有多少人? –

+0

需要多长时间才能找出为什么b.getA() - > getAnum()是因为B对象默认构造为NULL A而导致分段错误?你不妨再仔细思考这个设计。 – WhozCraig

回答

0

cout < < b.a-> GetAnum();因为你的变量是公开的,它可以被访问。

+0

如果数据成员是私人的,该怎么办 – user1559792

+1

仅仅因为它是公开的并不意味着你应该使用它。实际上,你应该使用'GetAnum()'而不是'private'。 **免责声明:**使用getters和setter不适合使用。我在这里推荐它,因为给出的例子缺乏细节和背景。有时它不会被期望。 –

0

你在你的代码,通过解决这些问题,你可能会发现更多有用的东西,找到你的答案,但在C旁边++为了叫你需要使用operator()的功能,所以你应该写b->getA()->getAnum()而不是许多错误b->getA->getAnum()。在您的版本中,b->getA是一项功能,您无法将operator->应用到它!但b->getA()调用该函数并返回一个A*,您可以使用它来调用getAnum()