VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1597|回复: 10

为什么复制构造函数里可以直接访问实参的私有成员?

[复制链接]

2

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-11-10 12:00:02 | 显示全部楼层 |阅读模式
为什么在复制构造函数里,可以直接访问实参的私有成员?
如:
class demo
{
        private:
                int i;
        public:
                demo();
                demo(const demo&);
};

demo::demo(const demo &obj)
{
        i = obj.i;    "这里直接使用私有成员!
}

这样可以编译通过,为什么?
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-11-10 12:45:01 | 显示全部楼层
要分清是一个类的成员函数可以访问该类的任何成员,而不仅是一个对象
自己的成员函数可以访问自己的任何成员, 通过每个对象的成员函数可以访问与该对象
相同类型的其他对象的任何成员.
回复

使用道具 举报

0

主题

14

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-11-10 13:45:01 | 显示全部楼层
对,访问权限是针对类而言,而不是针对对象而言。
回复

使用道具 举报

0

主题

20

帖子

21.00

积分

新手上路

Rank: 1

积分
21.00
发表于 2020-11-10 14:15:01 | 显示全部楼层
一个类的成员函数可以访问该类的任何成员,所以肯定能够访问在这个文件中的类中的private型变量int i 了
回复

使用道具 举报

0

主题

41

帖子

28.00

积分

新手上路

Rank: 1

积分
28.00
发表于 2020-11-10 14:30:01 | 显示全部楼层
自己是自己的友原函数
回复

使用道具 举报

0

主题

12

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-11-10 15:00:01 | 显示全部楼层
没什么好说的了 抓基础是正道
回复

使用道具 举报

2

主题

54

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-11-10 15:15:01 | 显示全部楼层
因为成员函数存在一个隐藏的this指针指向主调对象
比如
class A
{
public:
    void ok(int i){a = i;}
private:
    int a;
}

int main()
{
    A a;
    a.ok(3);
    return 0;
}
编译器内部会把a.ok()这样解析(只是个模型)
ok(int i, A *this)
{
    this -> a = i;
}
就是这个意思
{
}
回复

使用道具 举报

2

主题

54

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-11-10 15:30:01 | 显示全部楼层
i = obj.i
=====
而右边的obj.i可以直接使用
是因为类域名字解析的过程决定的,
在成员函数内部,解析名字的时候,先看函数局部域,然后整个类域(不区分public,private,protected的,都可以访问)
C++的语法规则,编译器这么实现的,了解即可
回复

使用道具 举报

0

主题

37

帖子

28.00

积分

新手上路

Rank: 1

积分
28.00
发表于 2020-11-10 16:15:01 | 显示全部楼层
hzxszmh
   
自己是自己的友原函数

学习了
  

回复

使用道具 举报

0

主题

7

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-11-10 16:30:01 | 显示全部楼层
这个跟拷贝构造无关,任何一个成员函数都可以,因为它们是同一个类
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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