标准也能出错 ?

zhulinjia 2009-06-16 11:03:08
....
.....
.....
class Counter
{
string a;
public:
operator string()
{
return a;
}

};

int _tmain(int argc, _TCHAR* argv[])
{
Counter a;

cout << "退出 请按 A" << std::endl;
while( a != "A" )
{
cout << " 输入你要计算的表达式: ";

cout << "值为: " << a << '\n';
}
system("pause");
return 0;
}


标准也能出错 ?
...全文
56 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
maxthon336 2009-06-17
  • 打赏
  • 举报
回复
你应该这样写:
#include<iostream>
#include<string>
using namespace std;
class Counter
{
string a;
public:
Counter()
{
a='\0';
}
Counter(const string str):a(str){}
bool operator!=(const string& str)
{
if(a.compare(str))return true;
return false;
}
friend ostream& operator<<(ostream& os,const Counter& str)
{
os<<str.a;
return os;
}
friend istream& operator>>(istream& is,Counter& str)
{
char temp[30];
is.get(temp,30);
if(is)str.a=temp;
while(is&&is.get()!='\n')continue;
return is;
}
operator string()
{
return a;
}

};

int main()
{
Counter a;
string str;
cout<<"退出 请按 A"<<endl;
while(a!="A")
{
cout<<"输入你要计算的表达式:";
cin>>a;
str=a;
cout<<"值为:"<<str<<endl;
}
system("pause");
return 0;
}
Sou2012 2009-06-17
  • 打赏
  • 举报
回复
帮顶
zhulinjia 2009-06-16
  • 打赏
  • 举报
回复
清楚了。

转换函数 不允许转换为 数组类型 or 函数类型 。 正好 string 是数组类型。 。

R
。。 晕死了
zhulinjia 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 pengzhixi 的回复:]
引用 14 楼 zhulinjia 的回复:
引用 10 楼 pengzhixi 的回复:
问个问题
a != "A"//"A"是什么类型.你先想清楚.要知道"A"并不是string 类型


C/C++ code string a = "A";
if( a == "A")
cout < < "a";

是不是 你看下就知道。



string a="A";这是调用了string 里面的构造函数 string(const char*);
而a=="A"你认为等号右边的会转换成string吗
[/Quote]

不要管那么多 , 只要知道 他是字符串, 另一个也是字符串, 它和它可以进行 比较 就行
风老二 2009-06-16
  • 打赏
  • 举报
回复

using namespace std;

class Counter
{
string a;
int m;
public:
Counter(string str = "test"):a(str),m(100){}
operator string()
{
return a;
}
operator int(){
return m;

}

};

void xxx(string s){
cout<<s<<endl;
}


int main(){
Counter x;
cout<<x<<endl;
xxx(x);
if (x == 100)cout<<"ok"<<endl;

system("pause");
return 0;
}


这样比较一下
int类型是可以隐式自动转换的,但string碰到操作符时就不行
pengzhixi 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zhulinjia 的回复:]
引用 10 楼 pengzhixi 的回复:
问个问题
a != "A"//"A"是什么类型.你先想清楚.要知道"A"并不是string 类型




C/C++ code string a = "A";
if( a == "A")
cout << "a";

是不是 你看下就知道。
[/Quote]

string a="A";这是调用了string 里面的构造函数 string(const char*);
而a=="A"你认为等号右边的会转换成string吗
风老二 2009-06-16
  • 打赏
  • 举报
回复
那是措基础数据类型,string是类
zhulinjia 2009-06-16
  • 打赏
  • 举报
回复
只要存在转换, 编译器将在可以使用的内置转换的地方自动调用它 , 所以 你可以不用手动
风老二 2009-06-16
  • 打赏
  • 举报
回复

using namespace std;

class Counter
{
string a;
public:
Counter(string str = "test"):a(str){}
operator string()
{
return a;
}

};

void xxx(string s){
cout<<s<<endl;
}


int main(){
Counter x;
xxx(x);
if ((string)x == "test")cout<<"ok"<<endl;

system("pause");
return 0;
}
zhulinjia 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pengzhixi 的回复:]
问个问题
a != "A"//"A"是什么类型.你先想清楚.要知道"A"并不是string 类型
[/Quote]

	  string a = "A";
if( a == "A")
cout << "a";

是不是 你看下就知道。
pengzhixi 2009-06-16
  • 打赏
  • 举报
回复
a != "A"首先你的"A"的类型不是string 类型.是const char*
你这样比较是要将Counter类型转换为const char*还是要const char*转换为Counter类型呢?
风老二 2009-06-16
  • 打赏
  • 举报
回复
“<<”这类操作符不能在衍生数据类型上自动重载
zhulinjia 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 everest79 的回复:]
那你也得type operator type()
[/Quote]

转换函数采用如下形式:

operator type();


你要去复习一下 这章了

pengzhixi 2009-06-16
  • 打赏
  • 举报
回复
问个问题
a != "A"//"A"是什么类型.你先想清楚.要知道"A"并不是string 类型
风老二 2009-06-16
  • 打赏
  • 举报
回复
那你也得type operator type()
zhulinjia 2009-06-16
  • 打赏
  • 举报
回复
我想大家都知道 operator type() 是转换吧

最后 转换成 type 类型
zhulinjia 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mengde007 的回复:]
标准你也敢重载?
[/Quote]

我这是转换 不是重载

从 Counter 类型 转成 string 类型 之后判断

上面 代码中 string a ; a值为 空 我想大家都知道 是怎么来的吧



mengde007 2009-06-16
  • 打赏
  • 举报
回复
就算标准;返回了什么类型?
mengde007 2009-06-16
  • 打赏
  • 举报
回复
标准你也敢重载?
风老二 2009-06-16
  • 打赏
  • 举报
回复
我的意思是你打那输入a呀
加载更多回复(3)

65,211

社区成员

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

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