为什么同类型的class可以访问同类的私有成员

先看代码

#include <iostream>
using namespace  std;
int cnt=0;
class Num{
    int real,imag;
    //static int cnt;
public:
    Num(int a,int b):real(a),imag(b){cnt++;}
    ~Num(){
        cnt--;
    }
    Num(const Num &a){//这里本来认为应该会出现编译报错,但是并没有
        //cnt++;
        real=a.real;
        imag=a.imag;
    }
    static void show(){
        cout<<cnt<<endl;
    }
    int get_real(){
        return real;
    };
    int get_imag(){
        return imag;
    }
    friend ostream & operator<<(ostream&,Num&a);
    friend istream & operator >>(istream&b,Num&a);
    Num operator +(Num&a){
        return Num(real+a.get_real(),imag+a.get_imag());
    }
};
ostream & operator<<(ostream&b,Num&a){
    b<<a.real<<endl<<a.imag<<endl;
    return b;
}
istream& operator >>(istream&b,Num&a){
    return b>>a.real>>a.imag;
}


int main(){
    Num::show();
    Num a(9,6);
    Num b(6,9);
    Num c=a;
    //Num c=a+b;
    //cout<<c;
    Num::show();


    return 0;
}

经过查找资料
发现
封装是编译期的概念,是针对类型而非对象的,在类的成员函数中可以访问同类型实例对象的私有成员变量.
同时看到知乎上的解答比较容易理解
引用如下
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值