有关重载函数?

doublejie 2003-03-07 12:40:35
第一组:
void dribble (char * bits);
void dribble (const char * bits);
是重载函数吗?

第二组:
void dribble (char * bits);
void dribble (const char * cbits);
是重载函数吗?

...全文
30 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hot1985 2003-03-09
  • 打赏
  • 举报
回复
mark
doublejie 2003-03-09
  • 打赏
  • 举报
回复
等待专家,我已晕了:(
luckyum 2003-03-08
  • 打赏
  • 举报
回复
我也加一个

char& position(int,int);
char position(int,int)const;
这个重载函数很有用。
cout<<position(4,4);
position(4,4)="+";
可他是怎么判断用哪个呢?
WeltactXp 2003-03-07
  • 打赏
  • 举报
回复
都不是

因为只跟函数签名有关,况且我又记得const不属于签名里面的东西

但愿我没有记错给你带来混淆
ckacka 2003-03-07
  • 打赏
  • 举报
回复
都是

重载和形式参数名字没有关系,而是形式参数的类型
JoshuaLi 2003-03-07
  • 打赏
  • 举报
回复
第一组:
void dribble (char *);
void dribble (const char *);
是重载函数吗?

第二组:
void dribble (char *);
void dribble (const char *);
是重载函数吗?

//
都是,既然是原型就可以去掉参数名
seablue 2003-03-07
  • 打赏
  • 举报
回复
楼上说的没错,是不是重载我有点模糊
但调试时的确没有报错,,重载只重类型,个数,只要编译器能识别就行
但这样定义的意议不是很大
WeltactXp 2003-03-07
  • 打赏
  • 举报
回复
晕喽
tjhgltt 2003-03-07
  • 打赏
  • 举报
回复
up
jinyongzhi 2003-03-07
  • 打赏
  • 举报
回复
chinajiji(菜鸟叽叽):

这个也是重载:

void f(int);
void f(int)const;

class Base{};
class Derived : public Base{};
void f() throw(Base);
void f() throw(Derived);

上面那两组我觉得都不是重载,可调试的时候都没有报错,是什么原因?
jinyongzhi 2003-03-07
  • 打赏
  • 举报
回复
chinajiji(菜鸟叽叽)
没讲,你说说看
另外,你还没说你举的那两个例子到底是不是重载呢,说说原因。
jinyongzhi 2003-03-07
  • 打赏
  • 举报
回复
void dribble (char* );
void dribble (const char*);
是重载,换成引用也是,但如果改成
void dribble (char);
void dribble (const char);
就不是重载了,因为参数是值传递,仅仅是传递给函数一个备份,const的意义不大。


以下是《c++ primer》的原话:

当一个参数类型是const或volatile时,在识别函数声明是否相同时并不考虑const和volatile修饰符。
//声明了同一函数:
void f( int );
void f( const int );
参数是const,这只跟函数的定义有关系:它意味着,函数体内的表达式不能改变参数的值。但是,对于按值传递的参数,这对函数的用户是完全透明的:用户不会看到函数对按值传递的实参的改变。
……
如果把const或volatile应用在指针或引用参数指向的类型上,则在判断函数声明是否相同时,就要考虑const和volatile修饰符。
//声明了不同函数:
void f( int* );
void f( const int* );
//声明了不同函数:
void f( int& );
void f( const int& );
chinajiji 2003-03-07
  • 打赏
  • 举报
回复
jinyongzhi(__Intel Inside__)
的那个回复很好!学习!
但C++ primer中是否讲了:
void dribble (char);
void dribble (const char);
就不是重载了

而:
void f( int* );
void f( const int* );
是重载的最根本的原因了吗?
如果讲了,请贴出来看一看.
如果没讲,我来解释一下,看对不对?
chinajiji 2003-03-07
  • 打赏
  • 举报
回复
jinyongzhi(__Intel Inside__)
看法不妥,
const object calling const member function, non-const object calling non-const member function.
jinyongzhi 2003-03-07
  • 打赏
  • 举报
回复
我记得,重载只看函数名跟参数列表,返回值根本不影响重载
void f(int);
void f(int)const;

虽然重载没有报错,但对象调用时却只能调用void f(int)。
mare 2003-03-07
  • 打赏
  • 举报
回复
重载和形式参数名字没有关系,而const也认为是署名的一部分
所以我认为两个都不是重置,那么应该跟第一位一样吧
chinajiji 2003-03-07
  • 打赏
  • 举报
回复
这个也是重载:

void f(int);
void f(int)const;
这个不是:

int* f(int);
const int* f(int);

//嘿嘿,看看下面两个是不是重载:

class Base{};
class Derived : public Base{};

void f() throw(Base);
void f() throw(Derived);
chinajiji 2003-03-07
  • 打赏
  • 举报
回复
是重载,const 是参数类型的一个组成部分.而参数名字更本与重载无关.形参名不要都可以.
tjhgltt 2003-03-07
  • 打赏
  • 举报
回复
我想你的问题很矛盾,即然用了CONST保留为什么还要重载它?
doublejie 2003-03-07
  • 打赏
  • 举报
回复
楼上的两位:我晕!
重载和形式参数的名字是没有关系,但是和const有没有关系?

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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