c++构造函数的问题
怪我咯
怪我咯 2017-04-17 14:18:34
[C++讨论组]

请教一下关于c++中构造函数的问题:

class HasPtr {
public:
    HasPtr(const std::string& s = std::string()) : ps(new std::string(s)), i(0)
    {
    }
    HasPtr(const HasPtr& hp) : ps(new std::string(*hp.ps)), i(hp.i) {}
    HasPtr& operator=(const HasPtr& hp)
    {
        std::string* new_ps = new std::string(*hp.ps);
        delete ps;
        ps = new_ps;
        i = hp.i;
        return *this;
    }

private:
    std::string* ps;
    int i;
};

想请问一下为什么在拷贝构造函数和赋值操作符中,接受的那个引用可以直接用hs.ps来取它的私有数据ps,之前都是写js的,没有私有这么一说,以前看着没想什么,今天突然想到这个问题,为什么通过.运算符直接取到了私有数据呢?求指点!

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
巴扎黑

所谓的类成员访问权限public/protected/private是针对来自外部的访问而言的,你这是类自身的函数,都是自家人能有什么问题。

或者这么说,调用方是HasPtr::operator =,是归属于HasPtr的;而被调用方是hp.ps,ps也是归属于HasPtr,完全符合private的规定。这和.运算没啥关系。

怪我咯

类的成员函数是可以访问该类实例对象的私有属性的,类的访问权限是编译器强加的,所以只要在编译阶段没有问题,就是没有问题的,运行过程中是能取到私有变量的,决定能不能访问到私有变量的阶段是编译阶段,编译阶段hsHasPtr的类作用域中,这时是可以找到hs.ps这个符号的,编译可以通过,然后就可以来去私有变量了。
PS: js也有私有变量啊,用闭包不就可以产生吗?

天蓬老师

访问说明符只在不同类之间起作用,对同一个类的对象不起作用。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号