我正在使用borland turbo C++编译器(4.5).这是我的代码,但我得到的错误如下:'time :: add(time)'的多个声明.这里我重载了add()三次错误来自第3次重载,即"void add(time) T1)".
#include<iostream.h>
#include<conio.h>
class time
{
int h,m;
public:
void input()
{
cout<<"\n Enter hour :";
cin>>h;
cout<<"\n Enter min :";
cin>>m;
}
void display()
{
cout<<"\n time is : "<<h<<":"<<m;
}
void add(time t1,time t2)
{
h=t1.h+t2.h+(t1.m+t2.m)/60;
m=(t1.m+t2.m)%60;
}
time add(time t1)
{
time t3;
t3.h=h+t1.h+(m+t1.m)/60;
t3.m=(m+t3.m)%60;
return t3;
}
void add(time t1)
{
h=h+t1.h+(m+t1.m)/60;
m=(m+t1.m)%60;
}
};
int main()
{
time t1,t2,t3;
t1.input();
t2.input();
t3.add(t1,t2);
t3.display();
t3=t2.add(t1);
t3.display();
t2.add(t1);
t2.display();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
NPE*_*NPE 13
在C++中,您不能仅仅在返回类型上重载函数:
time add(time t1) {...}
void add(time t1) {...}
Run Code Online (Sandbox Code Playgroud)
我会建议更换三个add()带运算符重载函数+和+=.这将解决歧义,并且还将清楚地说明哪些操作修改了对象,哪些操作返回了新对象.
函数名,修饰符和参数是.保留函数名称并更改其他名称会导致重载.
这是因为如果您只是编写,编译器可能无法知道要调用哪个方法add(t);.
有关参与重载决策的函数的信息(13.3):它的参数类型列表(8.3.5),如果函数是类成员,函数本身和类的cv限定符(如果有的话)其中声明了成员函数.[...]
这意味着,如果函数是类的一部分,您还可以通过添加const修饰符来重载它.
此外,如果声明参数类型也会更改const.