游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2322|回复: 1

[求助]一个私有数据被访问的问题!!

[复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2005-11-24 21:23:00 | 显示全部楼层 |阅读模式
#include <iostream>
using namespace std;

class A
{
public:
        A()
        {
                m_x = 1;
        }

        int Get()
        {
                return m_x;
        }

        operator +(const A &A2)
        {
                int sum;
                sum = m_x + A2.Get();  //(1)
                sum = A2.m_x + m_x;      //(2)
                return sum;
        }

private:
        int m_x;
};

int main()
{
        A A1;
        A A2;
        int s;
        s = A1+A2;
        cout<<s<<endl;
        cin.get();
}

当(1)被注释的时候,可以被编译通过! 但是当(1)不被注释的时候报出的错误是“A::Get” : 不能将“this”指针从“const A”转换为“A &”,这是为什么啊!

(2)虽然能被编译通过,但是这好象是违反了私有数据不能被访问的规定啊!
A2.m_x 这是私有数据啊!

小弟的编译环境是 VS2003

请大家多多指教啊!

2

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2005-11-25 20:17:00 | 显示全部楼层

Re:[求助]一个私有数据被访问的问题!!

const 类型的对象是不能调用函数的。所以(1)是不能被编译通过的,
可以把 operator +(const A &A2) 该为 operator +(A &A2) 或 operator +(A *A2) 就行了。
而(2)呢,私有数据只对其他的类型才算私有(如:外部函数,其他类型的类,派生类等),而对同种类型的类是共有的(因为都是同样东西嘛,你当然知道我,我当然知道你了), 所以(2)才会被编译通过。。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 18:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表