C++;方法访问受限的指针 在C++中,我希望有一个实例方法返回一个对象引用,但是调用方只允许调用以访问所涉及的对象的方法。换句话说,不应允许调用方调整指针引用的对象的状态。 在考虑性能和副本处于某个时间点的事实时,返回对象的副本并不理想

C++;方法访问受限的指针 在C++中,我希望有一个实例方法返回一个对象引用,但是调用方只允许调用以访问所涉及的对象的方法。换句话说,不应允许调用方调整指针引用的对象的状态。 在考虑性能和副本处于某个时间点的事实时,返回对象的副本并不理想,c++,pointers,C++,Pointers,请看我的例子: class _balance { public: _balance(int pBalance) // Constructor {setBalance(pBalance);} int getBalance() {return bal;} void setBalance(int pBalance)

请看我的例子:

    class _balance {
        public:
            _balance(int pBalance)              // Constructor
                {setBalance(pBalance);}
            int getBalance()
                {return bal;}
            void setBalance(int pBalance)
                {bal = pBalance;}

        private:
            int bal;
    };

    class _account {
        public:
            _account()                          // Constructor
                {balance = new _balance(100);}
            _balance *getAccountBalance()
                {return balance;}

        private:
            _balance *balance;
    };

    int main() {
        // Create an account (with initial balance 100)
        _account *myAccount = new _account();

        // Get a pointer to the account balance and print the balance
        _balance *accountBalance = myAccount->getAccountBalance();              
        printf("Balance is:%d", accountBalance->getBalance() );               // This should be supported

        // Changing the balance should be disallowed. How can this be achieved?
        accountBalance->setBalance(200);
        printf("Adjusted balance is:%d", accountBalance->getBalance() );
    }
结果输出:

<>在C++中有实现这个的方法吗? 谢谢你

不应允许调用方调整指针引用的对象的状态

嗯,你知道,这就是
const
的全部内容

你需要一本好的教科书。查看。

Re

不应允许调用方调整指针引用的对象的状态

嗯,你知道,这就是
const
的全部内容


你需要一本好的教科书。查看。

使用关键字
const

const _balance* accountBalance = myAccount->getAccountBalance();
这使得成员是常量,因此无法修改。这也意味着您只能调用标记为
const
balance
成员函数。由于
getBalance()
不修改该值,因此可以将其标记为
const

        int getBalance() const // <----
            {return bal;}

int getBalance()const/使用关键字
const

const _balance* accountBalance = myAccount->getAccountBalance();
这使得成员是常量,因此无法修改。这也意味着您只能调用标记为
const
balance
成员函数。由于
getBalance()
不修改该值,因此可以将其标记为
const

        int getBalance() const // <----
            {return bal;}

int getBalance()const/返回一个“const\u balance*”。默认情况下,不允许使用所有非常量方法。

返回“常量余额*”。默认情况下,不允许使用所有非常量方法。

谢谢,这完美地回答了问题。谢谢,这完美地回答了问题。全局命名空间中以下划线开头的名称保留用于实现。您的代码格式不正确。全局命名空间中以下划线开头的名称保留用于实现。你的代码格式不正确。