加载中…
个人资料
一叶知秋
一叶知秋
  • 博客等级:
  • 博客积分:0
  • 博客访问:424,864
  • 关注人气:82
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

关于成员函数的私有成员问题

(2013-05-14 20:00:54)
标签:

私有成员

对象

it

分类: C

今天,同学在看林锐博士《高质量C/C++编程指南》的string类的拷贝构造函数部分像偶问了个问题,不得不说自己以前还真没发现这方面的知识空白。

顺带着,也练习下,把这三个函数写出来:

//普通构造函数

string::string(const char *str)

{

         If(str ==NULL)

{

         m_data = new char[1];

         m_data = ‘\0’;

}

else

{

         int length = strlen(str)

         m_data = new char[length+1];

         strcpy( m_data, str);
}

}

//拷贝构造函数

string::stringstring &other

{

         int length = strlen(other.m_data)

         m_data = new char[length+1];

         strcpy(m_data, other.m_data);

}

//赋值函数

string & string::operate = (const string  &other)

{

    (1)检查自赋值

         if(this == &other)

                   return *this;

         (2)释放原有内存资源

         delete[]  m_data;

         (3)分配新的内存资源,并拷贝

         int length = strlen(other.m_data);

         m_data = new char[length+1];

         strcpy(m_data, other.m_data);

 

         return *this;

}

同学问我的不是什么赋值函数啊什么的问题,而是为什么可以访问other的私有成员other.m_data???不是只有自己才可以访问自己的私有成员么?这一点我以前没有考虑过。经过上网查证,好像很多人对此都有点陌生,故总结之:

 

关于成员函数的私有成员的问题

 

一般情况下,类的私有成员只能是类自己本身的成员函数才可以访问,其子类,还有其他类是无权访问的。当然,被类声明为自己的友元函数的函数和友元类也可以和类的成员函数一样,对私有成员具有访问和修改的权限。

这里我们需要注意的是:对于同属于一个类的两个不同对象而言,它们之间是可以互相访问其私有成员的。因为两个对象是同一个对象的实例化,他们的成员函数即是类本身的成员函数,类本身的成员函数当然可以访问类的私有成员变量。成员函数是类的成员函数,不是某个对象的成员函数。所以只要在该类的成员函数中,该类的对象可以直接访问类的成员变量的。而所在类一个自身的实例,可以用this来表示。所以可以写成
void super_put(myclass t)
{this.i=t.i;}

这里的thist一样都是myclass的一个对象。就像上文中的other,也是同样的道理。

总之:只要是在成员函数和友元中就可以直接访问该类的私有成员变量,无论类的对象是谁。

1、编程语言中的访问控制符如publicprotectedprivate等等是针对此类外的类型、对象来说的。

2、在类的方法成员内部(包括构造函数)访问同一个类对象的私有成员时,有些访问控制符是不起作用的,它们在同一个域内。

3、通过上面的代码,突然想到在构造函数中的this岂不也是一个类对象,它就能访问本类的私有成员。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有