使用来自不同类的指针访问类的私有成员

时间:2014-04-23 15:41:19

标签: c++ class pointers containers

C ++给了我各种令人头疼的问题。如何在不同的类中访问另一个类的私有成员?我的示例代码如下,我正在尝试访问其成员但我不断收到有关它的各种错误是另一个类的私有成员。

class Ex1 {
private: 
      int test1;
};

class Ex2 {
public:
      Ex2();
      void access2Ex();
private:
      Ex1 *pointer_to_Ex1;
};

我想从Ex2中访问Ex1并在Ex2中对它进行nAsty操作并且讨厌我只是希望能够触摸它,爱抚它,或者至少承认Ex2存在。任何人都可以帮助我,我很感激。

2 个答案:

答案 0 :(得分:0)

"私人"的全部目的一个类的成员(这个Java,C ++或任何其他OO语言的概念为" public" vs" private")是其他类无法访问它们的。如果您确实希望其他类具有访问权限,请在相关类上创建一个访问者函数/属性:

 class Ex1{
   public:
     int getTest(){ return test1; }
     void setTest(int value){ test1 = value; }
   private:
     int test1;
 }

在那里,现在你有一个很好的界面,你可以编程并利用面向对象的主体。

编辑:回答以下评论

 class Ex2{
   public:
     Ex2();
     void printIt(){
       cout << pointer_to_Ex1->getTest() << endl;
     }
 }

因此,指针将能够调用它指向的类的所有公共方法。次要建议:使用unique_ptr(请参阅标准库)来包装该指针并控制Ex1指针的生命周期。

答案 1 :(得分:0)

@Wheaties答案很好。但是,我建议您不要只是添加getset方法,而应考虑添加对类的目的有意义的方法。

例如,我曾在一个系统中使用过一次库,而不是采用Loan::setDueDate(date)方法,而是使用Loan::renew(date)Loan::recall(date)方法。最初他们做了同样的事情:date_ = date但随着时间的推移他们独立进化,例如,renew(date)方法可以增加renewCount_成员。 (比添加setRenewCount(count)更好的方法,并强制调用者记住在适当时调用这两种方法。)

封装是面向对象的重要原则。注意它会使您的程序更可靠。禁止访问私有成员是使ncapsulation工作的工具。 Setters削弱了该工具(虽然它们比允许从“任何地方”直接访问成员要好得多。)