神奇!居然能访问私有成员,求教,谢谢

csdaa2010 2014-04-05 07:18:00
今天在写一个复数计算程序时,居然发现能访问私有成员,神奇
在 谷歌上搜索无果 后,贴出来 希望高手能赐教
谢谢

VC6.0下调试的


//ComplexH.h
#ifndef Complex_H
#define Complex_H/*注意这个宏定义不要和类名相同*/
class Complex
{
private:
float real;
float image;
public:
Complex(); //构造函数
Complex(float real,float image); //构造函数
Complex(const Complex &c); //构造函数(拷贝)
Complex & operator =(const Complex &c); //重载等符号
Complex operator +(const Complex &c)const; //重载等符号
Complex operator -(const Complex &c)const; //重载等符号
Complex operator *(const Complex &c)const; //重载等符号
Complex operator /(const Complex &c)const; //重载等符号
friend void display(const Complex &c); //显示内容(友元)
friend float GetReal(const Complex &c); //获取实数部分(友元)
friend float GetImage(const Complex &c); //获取虚数部分(友元)
friend void SetReal(Complex &c,const float n); //设置实数部分(友元)
friend void SetImage(Complex &c,const float n);//设置虚数部分(友元)
~Complex(); //析构函数
};
#endif



//Complex.cpp
#include "ComplexH.h"
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
/*
Complex(); //构造函数
Complex(float real,float image); //构造函数
Complex(const Complex &c); //构造函数(拷贝)
Complex & operator =(const Complex &c); //重载等符号
Complex operator +(const Complex &c)const; //重载等符号
Complex operator -(const Complex &c)const; //重载等符号
Complex operator *(const Complex &c)const; //重载等符号
Complex operator /(const Complex &c)const; //重载等符号
friend void display(); //显示内容(友元)
friend float GetReal(const Complex &c); //获取实数部分(友元)
friend float GetImage(const Complex &c); //获取虚数部分(友元)
friend void SetReal(Complex &c,const float n); //设置实数部分(友元)
friend void SetImage(Complex &c,const float n);//设置虚数部分(友元)
~Complex(); //析构函数
*/
Complex::Complex()
{
this->image = 0;
this->real = 0;
cout<<"使用无参构造函数"
<<endl;
}
Complex::Complex(float real,float image)
{
this->real = real;
this->image = image;
cout<<"使用两个参数的构造函数"
<<"real:"<<real<<" , "
<<"image:"<<image
<<endl;
}
Complex::Complex(const Complex &c)
{
this->image = c.image;
this->real = c.real;
cout<<"拷贝函数启动"<<endl;
}
Complex::~Complex()
{
cout<<"析构函数启动!"
<<endl;
}
Complex Complex::operator +(const Complex &c)const
{

return (*new Complex(c.real + this->real,c.image + this->image));//神奇,为什么能访问C的私有成员????
}
Complex Complex::operator -(const Complex &c)const/*如果是a-b,b-a怎么区分?*/
{
return (* new Complex(this->real-c.real,this->image-c.image));
}
Complex Complex::operator *(const Complex &c)const
{
return (*new Complex(this->real*c.real-this->image*c.image,this->real*c.image+this->image*c.real));
}
Complex Complex::operator /(const Complex &c)const
{
float t = c.real * c.real + c.image * c.image;
float r,i;
if(!t)
{
cout<<"不能被0除"<<endl;
exit(-1);
}
r = this->real * c.real + this->image * c.image;
i = this->image*c.real - c.image*this->real;
return (Complex(r/t,i/t));
}
Complex& Complex::operator =(const Complex &c)/*注意此处!!!!!!!*/
{
if(this==&c)
return *this;
return (* new Complex(c.real,c.image));
}
float GetReal(const Complex &c)
{
return c.real;
}
float GetImage(const Complex &c)
{
return c.image;
}
void SetReal(Complex &c,const float n)
{
c.real = n;
}
void SetImage(Complex &c,const float n)
{
c.image = n;
}
void SetComplex(Complex &c,float real,float image)
{
SetReal(c,real);
SetImage(c,image);
}
void display(const Complex &c)
{
cout<<"display():"
<<c.real
<<" , "
<<c.image<<"i"
<<endl;
}






//Enter.cpp
#include <iostream>
#include "Complex.cpp"
using std::cin;
using std::cout;
using std::endl;
int main()
{
cout<<"****************初始化****************"<<endl;
Complex comp_a,comp_b(2,3);
cout<<"comp_a:";
display(comp_a);
cout<<"comp_b:";
display(comp_b);
cout<<"****************初始化****************"<<endl<<endl;

cout<<"****************修改****************"<<endl;
SetComplex(comp_a,1,1);
cout<<"修改comp_a为:1,1\n \bcomp_a:";
display(comp_a);
cout<<"****************修改后****************"<<endl<<endl;

cout<<"****************相加****************"<<endl;
cout<<"两数【相加】"<<endl;
display(comp_a+comp_b);
cout<<"****************相加****************"<<endl<<endl;

return 0;
}
...全文
52 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdaa2010 2014-04-05
  • 打赏
  • 举报
回复
引用 2 楼 baichi4141 的回复:
权限控制是针对类的,不是针对对象的 同一个类的两个对象互相访问成员变量,跟public和private没有任何关系
引用 1 楼 taodm 的回复:
尼玛啊,楼主用的什么垃圾教材啊。 一个类对象能访问同类型其它对象的私有成员,这是最基本的知识点啊。 如果你的教材上竟然没讲,那就赶快扔了。 如果你的老师竟然没讲,也赶快撵了。
老师给了代码截图 让我们打字 我不想打字,所以自己编了一个 抱歉 没学好,会再重新看一遍书
baichi4141 2014-04-05
  • 打赏
  • 举报
回复
权限控制是针对类的,不是针对对象的 同一个类的两个对象互相访问成员变量,跟public和private没有任何关系
taodm 2014-04-05
  • 打赏
  • 举报
回复
尼玛啊,楼主用的什么垃圾教材啊。 一个类对象能访问同类型其它对象的私有成员,这是最基本的知识点啊。 如果你的教材上竟然没讲,那就赶快扔了。 如果你的老师竟然没讲,也赶快撵了。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧