| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 841 人关注过本帖
标题:很不明白的问题
只看楼主 加入收藏
comebaby
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2006-6-17
收藏
 问题点数:0 回复次数:8 
很不明白的问题

#include <iostream>

#include <string>

using namespace std;

class String
{
private:
string s;

public:

String(string s1)
{
s=s1;
}
String()
{
}
~String()
{

}

void show()
{
cout<<s<<endl;
}

String operator+(String &);
friend void operator=(String &,String &);
friend int operator>(String &,String &);

};

String String::operator+(String &s1)
{
String t;
t.s=s1.s;
return t;
}


void operator=(String &s1,String &s2)
{
s1.s=s2.s;

}

int operator>(String &s1,String &s2)
{
if(s1.s>s2.s)
return 1;
else
return 0;
}

int main()
{
String str1("LOVE"),str2("you"),str3;
str1.show();
str2.show();
str3=str1+str2;
str3.show();
if(str1>str2)
cout<<"str1>str2"<<endl;
else
cout<<"str1<str2"<<endl;
getchar();
return 0;
}

出错:
32 D:\Dev-Cpp\未命名1.cpp
`void operator=(String&, String&)' must be a nonstatic member
47 D:\Dev-Cpp\未命名1.cpp
`void operator=(String&, String&)' must be a nonstatic member


搜索更多相关主题的帖子: void private include public 
2006-11-30 07:48
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
opertor=必需是成员函数
以下是MSDN中对此的描述
The assignment operator (=) is, strictly speaking, a binary operator. Its declaration is identical to any other binary operator, with the following exceptions:

●It must be a nonstatic member function. No operator= can be declared as a nonmember function.

●It is not inherited by derived classes.

●A default operator= function can be generated by the compiler for class types if none exists.

2006-11-30 12:22
comebaby
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2006-6-17
收藏
得分:0 

这题是书上后面的练习题
规定"=,>"运算符重载函数为友元函数,而“+”为运算符重载函数为成员函数
楼上的,可以用中文解释么?我英语太烂了

2006-12-01 07:10
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
严格的说,赋值操作符是一个二元操作符.它的声明和其他的二元操作符一样,但是以下例外

●赋值操作符必需是非静态成员函数.opertor=不可以声明为非成员函数

●赋值操作符不会被派生类继承

●如果编译器找不到opertor=,就会为类生成一个缺省的opertor=函数

以上是我的翻译,不太准确。

如果书上非让你那么做,换本书吧

2006-12-01 14:58
comebaby
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2006-6-17
收藏
得分:0 

那本书,本来就是入门者学的,我也觉得垃圾,
不过,我只想把后面的练习全部做完,

谢谢!你噢

2006-12-01 19:50
w362034710
Rank: 1
等 级:新手上路
帖 子:169
专家分:0
注 册:2006-12-2
收藏
得分:0 
你写的那程序也太离谱了吧,,,
2006-12-02 15:50
comebaby
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2006-6-17
收藏
得分:0 

楼上的``指教一下啊

2006-12-04 07:47
lzy340623339
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2006-10-12
收藏
得分:0 

友员重载等号的参数要是常类型

2006-12-09 16:32
kukata
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-3-5
收藏
得分:0 
回复:(comebaby)很不明白的问题

The assignment operator (=) is, strictly speaking, a binary operator. Its declaration is identical to any other binary operator, with the following exceptions:

●It must be a nonstatic member function. No operator= can be declared as a nonmember function.

●It is not inherited by derived classes.

●A default operator= function can be generated by the compiler for class types if none exists.

这里面清楚的讲到:"No operator= can be declared as a nonmember function",即等于号的重载函数必须是(类)的成员函数。而你的程序里把它作为了友元函数,不符合语法要求。

2007-03-05 19:26
快速回复:很不明白的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038499 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved