先看代码
#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;
}
经过查找资料
发现
封装是编译期的概念,是针对类型而非对象的,在类的成员函数中可以访问同类型实例对象的私有成员变量.
同时看到知乎上的解答比较容易理解
引用如下

这篇博客探讨了C++中的类和对象,特别是构造函数、析构函数、复制构造函数的使用,以及友元函数的概念。示例代码展示了如何定义一个复数类`Num`,包括成员变量、构造与析构、赋值操作,并实现了友元函数以支持输入输出流操作。同时,文章提到了封装的概念,指出它是针对类型的,允许在类的成员函数中访问同类型实例的私有成员。
20

被折叠的 条评论
为什么被折叠?



