函数重载问题,不让我重载。。

五号智能 2008-05-24 06:05:50
#include <iostream>
using namespace std;

class teacher
{
public:
teacher(char* intput_name)
{
name=new char[10];

strcpy(name,intput_name);
}
teacher()
{
name=new char[10];
strcpy(name,"None");
}
~teacher()
{
delete [] name;
cout <<"delete finshed"<<endl;
}
void show();
char* show();
protected:
char* name;

};

void teacher::show()
{
cout <<name<<endl;
}
char* teacher::show()
{
return name;
}


class student
{
public:
student(char *temp):teacher1(temp)
{
number=1;
score=100;
}
student()
{
number=1;
score=100;
}
~student()
{
cout<<"student析解"<<endl;
}
void show();
protected:
int number;
int score;
teacher teacher1;
};
void student::show()
{
cout<<teacher1.show()<<endl<<number<<" "<<score<<endl;
}


int main()
{
student a;
student b("张大民");
a.show();
b.show();
return 0;
}
为什么不让我重载!我先去吃饭,回来再说
...全文
173 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
五号智能 2008-05-27
  • 打赏
  • 举报
回复

int main()
{
return 0;
}
//我是猪啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!搞不明白了!!!!


五号智能 2008-05-27
  • 打赏
  • 举报
回复
[code=c/c++]
int main()
{
return 0;
}
//我是猪啊
[/code]

五号智能 2008-05-24
  • 打赏
  • 举报
回复
结贴!!!!!!!!!!!!!!!!
baihacker 2008-05-24
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 matrixdwy 的回复:]
这就好比你丢一个硬币给自动贩卖机,你有时候希望它能给你可乐,有时候希望他能给你雪碧,两个东西的价格一样
如果这个自动贩卖机没有按钮给你选择,那么它怎么知道应该给你可乐还是雪碧?
解决方法就是给自动贩卖机加个按钮:
可乐 自动贩卖机_可乐(钱)
雪碧 自动贩卖机_雪碧(钱)
[/Quote]
赞...
matrixdwy 2008-05-24
  • 打赏
  • 举报
回复
这就好比你丢一个硬币给自动贩卖机,你有时候希望它能给你可乐,有时候希望他能给你雪碧,两个东西的价格一样
如果这个自动贩卖机没有按钮给你选择,那么它怎么知道应该给你可乐还是雪碧?
解决方法就是给自动贩卖机加个按钮:
可乐 自动贩卖机_可乐(钱)
雪碧 自动贩卖机_雪碧(钱)
matrixdwy 2008-05-24
  • 打赏
  • 举报
回复
直接换个函数名不就行了
iambic 2008-05-24
  • 打赏
  • 举报
回复
打错了……
>如果你值得是函数的返回类型,请明确的加上“返回”。
如果你指的是函数的返回类型,请明确的加上“返回”。
iambic 2008-05-24
  • 打赏
  • 举报
回复
>我需要重载两或两个以上个无参数函数,只有类型弄不同,
>以达到一个函数名多用途的功能,可以详细的解释一下吗
什么叫“函数弄不同”?我想你说的是返回类型。如果你值得是函数的返回类型,请明确的加上“返回”。

matrixdwy 2008-05-24
  • 打赏
  • 举报
回复
函数只能根据参数类型和参数个数重载,不能通过返回值类型重载
iwong 2008-05-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xgywd 的回复:]
可以说清楚一点吗,我不理解
[/Quote]1楼已经说得很清楚了,如果只有返回类型不同,那是不能重载的。

试想如果重载了,那么你调用teacher::show()时,到底是调用哪一个show()呢?

teacher t;
char* a = t.show(); //这个能看出是调用char* teacher::show()
t.show(); //那这个呢?两个teacher::show() 都能这样直接调用


编译器没办法区分,其他阅读程序的人也没办法区分,所以不允许重载。

要么你加一个无用的参数,要么就重新换个名字,display()、pring()都能很好地表达意思。
五号智能 2008-05-24
  • 打赏
  • 举报
回复
我需要重载两或两个以上个无参数函数,只有类型弄不同,以达到一个函数名多用途的功能,可以详细的解释一下吗
hastings 2008-05-24
  • 打赏
  • 举报
回复
名字完全可以取成不一样的嘛..
五号智能 2008-05-24
  • 打赏
  • 举报
回复
可以说清楚一点吗,我不理解
happyhpy 2008-05-24
  • 打赏
  • 举报
回复
jichu
baihacker 2008-05-24
  • 打赏
  • 举报
回复
void show();
char* show(int);
五号智能 2008-05-24
  • 打赏
  • 举报
回复
如果我需要这个功能我应该怎么办?
nuaacj8888 2008-05-24
  • 打赏
  • 举报
回复
注意:only by return type
nuaacj8888 2008-05-24
  • 打赏
  • 举报
回复
C:\VC\csdn1.cpp(24) : error C2556: 'char *__thiscall teacher::show(void)' : overloaded function differs only by return type from....

vc中报错已经说的很清楚了啊....
五号智能 2008-05-24
  • 打赏
  • 举报
回复
为什么我的教材上如是说?

函数重载是用来描述同名函数具有相同或者相似功能,但数据类型或者是参数不同的函数管理操作的称呼
jintianfree 2008-05-24
  • 打赏
  • 举报
回复
重载的两个函数,必需有不同的参数列表。仅返回值类型不同是不能重载的。
加载更多回复(2)

64,646

社区成员

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

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