什么叫对象访问自己的私有成员?

单身只好makefile 2014-05-14 10:28:57
什么叫对象访问自己的私有成员?
class C
{
private:
int name;
public:
void getname();
void get_out_name(C cc) { name= cc.name; }
}

C c1 , c2 ;

c1.name是不能访问的
但可以用 c1的公有函数访问name

而 c1.get_out_name( c2 ); 里 可以用 c2.name 得到name !!!!!!!!!!! (c2 怎么又可以直接拿到自己的私有了)????
/// 如果是必须 c2.getname() 我觉得正常些



...全文
195 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
漂浮一生 2014-05-14
  • 打赏
  • 举报
回复
引用 5 楼 u010162607 的回复:
[quote=引用 2 楼 a515360208 的回复:] 这个不一样啊,你类里面的函数自然可以调用私有数据成员

get_out_name(c  cc);
这个是 用     cc.name访问的cc对象的name
[/quote]
引用 5 楼 u010162607 的回复:
[quote=引用 2 楼 a515360208 的回复:] 这个不一样啊,你类里面的函数自然可以调用私有数据成员

get_out_name(c  cc);
这个是 用     cc.name访问的cc对象的name
[/quote] 关键是它调用的环境啊,是在成员函数里面啊,6楼已经解释的很清楚了,
garymaster 2014-05-14
  • 打赏
  • 举报
回复
private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. 不知道你对该类中的函数可以访问private属性怎么理解的。C++中函数是不属于对象的,因此对于类成员函数get_out_name来说,它既然能够访问this.name,就能够访问cc.name。
  • 打赏
  • 举报
回复
引用 2 楼 a515360208 的回复:
这个不一样啊,你类里面的函数自然可以调用私有数据成员

get_out_name(c  cc);
这个是 用     cc.name访问的cc对象的name
  • 打赏
  • 举报
回复
引用 1 楼 super_admi 的回复:
一般不会有这样的东西吧:
void get_out_name(C     cc)  {      name= cc.name;  }
如果你需要外部对name做一些操作,一般都是做成类似属性的东西:

public:
  int getName(){return name;}
  void setName(int name) {this.name = name;}
比如这个 两个对象相等
bool Card::operator==(  Card& card)
{
    /*这个也是可以的
       if(bookname==card.bookname&&
	   author  ==card.author&&
	   num     ==card.num      )
    */
	if(this->bookname==card.getName()&&
	   author  ==card.getAuthor()&&
	   num     ==card.getNum()       )
	{
		return true;
	}
	else
	{
		return false;
	}
}
linux_hsylar 2014-05-14
  • 打赏
  • 举报
回复
c1,c2要访问自己的私有成员,不能直接访问,一般都是在类内部定义个public接口: 如: int getname(){ return name; } name的初始化一般在构造函数中初始化; C(int name=100){ }; 这样在main函数中调用c.getname()就可以获取私有成员变量了。
漂浮一生 2014-05-14
  • 打赏
  • 举报
回复
这个不一样啊,你类里面的函数自然可以调用私有数据成员
super_admi 2014-05-14
  • 打赏
  • 举报
回复
一般不会有这样的东西吧:
void get_out_name(C     cc)  {      name= cc.name;  }
如果你需要外部对name做一些操作,一般都是做成类似属性的东西:

public:
  int getName(){return name;}
  void setName(int name) {this.name = name;}

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧