[在C ++中没有getter setter的访问成员

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[在C ++中没有getter setter的访问成员相关的知识,希望对你有一定的参考价值。

我不太会英语。希望你能理解。

我们如何才能获得私人会员?我听不懂。

当我们了解C ++的私有,公共,受保护的私有成员或函数时,可以在类范围内进行访问。

class TestClass 
public:
   TestClass() 
     testMem = 10;
   

   void testFunction() 
     cout << testMem << endl;
   
private:
   int testMem;

但是,当我看到这段代码时,我真的很困惑。


class B 
public:
    B() 
          testNumber = 10;
        

        void printMember() 
          cout << testNumber << endl;
        

private:
    int testNumber;


class Money 
public:
    Money();
        bool operator < (Money& amount, B& b) const 
           // this code doesn't make any error
           // why same type member can access their private member directly without getter and setter?
           amount.cents = 10;
           amount.dollors = 10;

           // this Code make a error
           // b.testNumber = 10;

           // below
           // compare code
         

private:
    int dollars;
    int cents;
;

我真的很困惑。为什么Money&amount参数可以在没有getter和setter的情况下访问其私有成员?但是B类无法在没有getter的情况下访问其私有成员。怎么样..?为什么..?

答案

第25行:b.testNumber = 10;

此代码生成错误,因为Money类试图直接访问其他类的私有数据成员。

私有数据成员只能由类本身访问。您可以通过在B中创建一个函数来更改数据成员,然后调用该函数来更改它来解决此问题。

示例:

class B 
public:
    B() 
          testNumber = 10;
        

        void changeMember(int newData)
        
            testNumber = newData;
        

        void printMember() 
          cout << testNumber << endl;
        

private:
    int testNumber;


class Money 
    friend class B;
public:
    Money();
        bool operator < (Money& amount, B& b) const 
           // this code doesn't make any error
           amount.cents = 10;
           amount.dollars = 10;

           // this Code make a error
           b.changeMember(10);

           // below
           // compare code
         

private:
    int dollars;
    int cents;
;

以上是关于[在C ++中没有getter setter的访问成员的主要内容,如果未能解决你的问题,请参考以下文章

什么是getter和setter方法

在继承中访问私有成员

C ++ - 通过getter函数在单独的类中从对象指针映射访问成员函数

如何在 AngularJS 中访问 c​​ookie?

没有访问C:WINDOWSsystem32的权限

有没有办法在 Eclipse 中自动生成 getter 和 setter?