注册 登录
编程论坛 C++教室

求助:在定义类的对象时,为什么在后面加了一个空括号就不对了呢?

千树 发布于 2014-04-24 10:40, 630 次点击
不加括号的代码:
#include<iostream>
using namespace std;
class FS
{
private:
float sb;
float xb;
public:
FS()
{
}
FS (float i,float j)
{
sb=i;
xb=j;
}
FS operator + (FS one )
{
return (FS(sb+one.sb,xb=one.xb));
}
void show()
{
cout<<sb<<'\t'<<xb<<"i"<<endl;
}
};


void main()
{
FS one(1.2,3.5);
FS two(2.4,-1.1);
FS three;
three = one +two;
three.show();
}
加了括号后的代码:
#include<iostream>
using namespace std;
class FS
{
private:
float sb;
float xb;
public:
FS()
{
}
FS (float i,float j)
{
sb=i;
xb=j;
}
FS operator + (FS one )
{
return (FS(sb+one.sb,xb=one.xb));
}
void show()
{
cout<<sb<<'\t'<<xb<<"i"<<endl;
}
};


void main()
{
FS one(1.2,3.5);
FS two(2.4,-1.1);
FS three(); //加了一个空括号
three = one +two;
three.show();
}
报错为:
F:\C++\10.cpp(32) : error C2659: '=' : overloaded function as left operand
F:\C++\10.cpp(33) : error C2228: left of '.show' must have class/struct/union type
2 回复
#2
rjsp2014-04-24 11:02
一大堆代码,谁有时间去给你找不同呀?!
我用 Beyond Compare 比较了一下你两段的差异,才找到不同点在哪里。

你应该这么问:
对于
class foo { …… };

int main()
{
    foo a;
    和
    foo a();
    有什么不同
}

别人就会告诉你,foo a 是定义了一个名叫a的foo类型的变量;而 foo a() 是声明了一个名叫a的函数,此函数参数列表为void,返回类型为foo。
#3
千树2014-04-24 12:57
回复 2 楼 rjsp
恩,知道了,下次注意
1