永发信息网

C++中类的成员访问属性问题

答案:5  悬赏:40  手机版
解决时间 2021-04-13 16:41

教材有这么段代码,是定义重载运算符的,我对这段代码的粗体(我标出来的)有些疑问,请看代码:


#include<iostream>
#include<string>
using namespace std;
//定义一个string类
class String
{public:
String()//初始化对象数据成员
{p=NULL;}
String(char *str);//重载构造函数
friend bool operator >(String &str1,String &str2);//声明运算符函数为友元函数
void display();
private:
char *p;
};


String::String(char *str)//定义构造函数
{
p=str;//使P指向实参字符串
}


void String::display()
{cout<<p;}//输出P所指向的字符串


bool operator >(String &str1,String &str2)//定义运算符重载函数
{
if(strcmp(str1.p,str2.p))
return true;
else return false;
}

int main()//编写测试函数
{String str1("Hello"),str2("Book");
cout<<(str1>str2)<<endl;
return 0;
}

p在类中已经定义为了私有变量,怎么能够通过对象名(str1.p)来引用它呢?我把这段代码在VC6.0里调试,也是不能通过,提示如下:

望解答,谢谢!

最佳答案

私有成员在外边当然不能访问了!


你可以设置公有接口来访问:


char* String::GetString()


{


return p;


}

全部回答

程序没有问题! 有问题也是编译器的原因!!!

问题一:p在类中已经定义为了私有变量,怎么能够通过对象名(str1.p)来引用它呢?

因为friend bool operator >(String &str1,String &str2);//声明运算符函数为友元函数

注意:私有变量可以被该类的成员函数以及友元函数访问!!!! 所以这里当然可以通过对象名访问!

问题二:我把这段代码在VC6.0里调试,也是不能通过....

这是VC6的一个BUG. 你把#include<iostream> 换成#include<iostream.h>即可.

也可以去下个SP6补丁安装. 望采纳!

私有成员 不能直接在外部调用 必须在公有用函数接口来访问 6784746

1. 因为友元函数可以操作类的私有数据成员; 2. 可能是VC6的一个BUG,在Borland的C/C++编译器中是正常的,因为这个用法在C/C++规范中是合法的。

确实是vc6里面的bug,vc2003里没有问题。改成下面的形式在vc6里面可以通过,可见是friend声明时编译器找不准函数类型了。

#include<iostream> #include<string> using namespace std; //定义一个string类 class String {public: String()//初始化对象数据成员 {p=NULL;} String(char *str);//重载构造函数 void display(); public: char *p; };

String::String(char *str)//定义构造函数 { p=str;//使P指向实参字符串 }

void String::display() {cout<<p;}//输出P所指向的字符串

bool operator >(String &str1,String &str2)//定义运算符重载函数 { if(strcmp(str1.p,str2.p)) return true; else return false; }

int main()//编写测试函数 {String str1("Hello"),str2("Book"); cout<<(str1>str2)<<endl; return 0; }

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
失落,真失落!艾弗森是否真的告别NBA?
非营运车辆5坐轿车,司乘人员保险最高能买多
关于女性游泳时小便的问题
现在召唤师精灵王的前置是什么
爱你有错英语怎么说?国语一起告诉我
新泰市晟源玻璃有限公司在什么地方啊,我要过
在雅典“黄金时代”,国家的最高权力机关是(
谁会DNF多玩的时装修改器 教教我
摩托车小链轮和后链轮不在同一条直线上,后链
我的她突然不理我了有什么原因?谁可以告诉我
第二次世界大战参战国有?
非诚勿扰报名费多少,请问?想去非诚勿扰现在
求动漫图片·~~~ 急~
问问回答一问题得几分、提问呢!
________+45=55+________,这里运用了加法___
推荐资讯
下列现象中不能说明存在大气压的是(  )
单选题When they got there,they&
如何下载CF
孤岛惊魂2,怎么去找伙伴
心死了血还是红的吗 ?
微信朋友圈的精美句子,来点微信朋友圈句子
一个正方体,用一个平面去截它,怎样才能截成一
怎么用百度搜索笔记本维修
慈祥食品晋江体验店怎么去啊,有知道地址的么
为什么我家电脑重装程序后CF必须每次重新安装
日本侵华的原因有哪些,日本侵华原因
大绯胸鹦鹉公鸟和母鸟有什么区别?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?