对象作为成员变量

Posted

技术标签:

【中文标题】对象作为成员变量【英文标题】:object as member variable 【发布时间】:2012-02-29 07:23:42 【问题描述】:

您好,我在访问对象时遇到了问题,

在我的程序中有 2 类 A 类和 B 类

b 类有一个成员变量名,保持为私有。gettes/setter 函数可以访问这个变量(因为变量是私有的)。

在 A 类中,有一个成员变量,B 类 b(private) 的对象。我使用了一个 getter 来在类外获取这个对象。

现在我想使用 a 类的对象来设置对象 b 的名称。 所以创建了以下代码,但我没有工作。

请帮我解决这个问题。

     // GetObject.cpp : Defines the entry point for the console application.
   //

   #include "stdafx.h"
  #include <iostream>

  class B
 
   int name;
   public:
   int getname()
   
     return name;
   
   void SetName(int i)
   
     name = i;
   
  ;
  class A
  
   private:
   B b;
   public:

   B GetB()
   
      return b;
   

   ;


   int _tmain(int argc, _TCHAR* argv[])
   
   int ii = 10;
  A a;
  a.GetB().SetName(ii);
  std::cout<<" Value :"<<a.GetB().getname();
  getchar();
return 0;
  

【问题讨论】:

【参考方案1】:

您需要通过引用(或指针)返回成员:

B& GetB()

   return b;

//or
B* GetB() //i'd prefer return by reference

   return &b; 

您现在拥有它的方式是返回对象的副本。

所以B A::GetB() 不会返回原始对象。您对其进行的任何更改都不会影响a 的成员。如果您通过引用返回,则不会创建副本。您将返回作为 a 成员的确切 B 对象。

【讨论】:

以上是关于对象作为成员变量的主要内容,如果未能解决你的问题,请参考以下文章

类作为成员变量

C++ 初始化作为对象指针容器的成员变量

接口作为成员变量——实现类和匿名内部类和匿名对象

如何初始化作为另一个类的成员变量的基类对象?

成员变量和属性

JAVA中的类成员变量是存在堆还是栈里面呀?