标题:一个类成员访问问题
只看楼主
xzx1002002
Rank: 2
等 级:论坛游民
帖 子:68
专家分:27
注 册:2006-3-7
 问题点数:0 回复次数:9 
一个类成员访问问题
下面是在百度知道发掘的一个挺有意思的问题。虽然实际中几乎不会这样来用。但是有助于深刻理解类成员的访问。

#include <iostream>
using namespace std;
class myclass{
int i;
public:
myclass(int s){i=s;}
myclass(){i=0;}
void xput(int test){i=test;}
void xget(){cout<<"i is "<<i<<"\n";}
void super_put(myclass t){i=t.i;}//直接访问了私有成员,还是用点访问的-_-
};
int main(){
myclass a,b;
int choice;
cout<<"直接访问私有成员变量测试开始……\n";
cout<<"请输入一个整数:";
cin>>choice;
a.xput(choice);
cout<<"a.xget() is ";
a.xget();
cout<<"b.xget() is ";
b.xget();
b.super_put(a);
cout<<"AFTER b.super_put(a)……\n";
cout<<"b.xget() is ";
b.xget();
return 0;
}

注意红色的一行。类对象直接访问了类的私有函数。大家可以讨论一下,这里为什么可以这样来用。
搜索更多相关主题的帖子: 类成员 百度 int myclass 
2008-08-11 13:57
xzx1002002
Rank: 2
等 级:论坛游民
帖 子:68
专家分:27
注 册:2006-3-7
得分:0 
我认为,
只要是在成员函数和友元中就可以直接访问该类的私有成员变量,无论类的对象是谁。
所以,访问类的私有成员变量的权限是相对于访问它的地方的,而不是类的对象。
2008-08-11 15:30
elegant87
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2008-1-15
得分:0 
类的成员函数可以直接访问类的私有成员的。
2008-08-11 16:41
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
得分:0 
........两个i明显不一样-,-

樱花大战,  有爱.
2008-08-11 19:24
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
得分:0 
数据成员的地址是对象地址加上数据成员在类中的偏移量-1....所以两个i的地址是不一样的.

樱花大战,  有爱.
2008-08-11 19:25
xlh5225
Rank: 2
等 级:论坛游民
威 望:2
帖 子:188
专家分:25
注 册:2007-8-14
得分:0 
当然可以!有问题?
2008-08-11 19:56
xzx1002002
Rank: 2
等 级:论坛游民
帖 子:68
专家分:27
注 册:2006-3-7
得分:0 
问题是两个i明显不一样,但是为什么都可以直接访问。
2008-08-12 09:15
thames
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-8-12
得分:0 
我想用剥洋葱的方法把程序还原就比较直观了
2008-08-12 13:04
zerocn
Rank: 1
等 级:新手上路
帖 子:126
专家分:0
注 册:2006-4-11
得分:0 
是可以的,一个类的成员函数可以访问同类的不同对象的成员
类似的,
1.派生类的成员函数可以访问同一个派生类的不同对象的基类子对象的protected成员
2.派生类的成员函数可以访问同一个派生类的不同对象的protected 和private成员



#include <iostream>
#include <stdlib.h>
#include <string>


using namespace std;
class base
{public:
 base():base_value(0){}   
 protected:
 int base_value;
};


class dervied:public base
{
 public:
 dervied():dervied_value(0){}
 void show(const dervied &obj){cout<<"base::base_balue:"<<obj.base_value<<endl
                              <<"dervied::dervied_value:"<<obj.dervied_value;}
 private:
 int dervied_value;     
};


using namespace std;


int main()
{
    dervied A,B;
    A.show(B);
    system("pause");   
    return 0;
}
2008-08-12 18:13
jimn1982
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-8-14
得分:0 
通俗理解
通俗理解是对象的数据和函数的代码是分开的.同类的对象公用函数的代码部分.所以只要传递进去的对象是同一个类实例化的.函数都可以访问.
2008-08-14 10:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-227693-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.462338 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved