返回信息流☆─────────────────────────────────────☆
LoveSHE (LoveSHE) 于 (Wed Nov 26 16:33:37 2008) 提到:
进行函数重载时, 要求同名函数在参数个数上不同,或者参数类型上不同。
除了这2个条件可以实现重载,还有其他呢
貌似网上说:特别注意:返回类型不同不可以作为函数重载的标识。
请教大家!
☆─────────────────────────────────────☆
yegle (一阁@SL小分队@lp是大牛) 于 (Wed Nov 26 16:34:06 2008) 提到:
这个…理解上有什么问题呢…
【 在 LoveSHE (LoveSHE) 的大作中提到: 】
: 进行函数重载时, 要求同名函数在参数个数上不同,或者参数类型上不同。
: 除了这2个条件可以实现重载,还有其他呢
: 貌似网上说:特别注意:返回类型不同不可以作为函数重载的标识。
: ...................
☆─────────────────────────────────────☆
LoveSHE (LoveSHE) 于 (Wed Nov 26 16:34:10 2008) 提到:
比如:
(1)void output();
(2)int output();
貌似不行吧
☆─────────────────────────────────────☆
yegle (一阁@SL小分队@lp是大牛) 于 (Wed Nov 26 16:36:26 2008) 提到:
是的
例如这两个例子
void output(){
cout<<"void"<<endl;
}
int output(){
cout<<"int"<<endl;
return 0;
}
那你用output();这个语句的时候编译器怎么知道你想调用哪个函数?
【 在 LoveSHE (LoveSHE) 的大作中提到: 】
: 比如:
: (1)void output();
: (2)int output();
: ...................
☆─────────────────────────────────────☆
caspar (爱慕|天冷了) 于 (Wed Nov 26 16:38:06 2008) 提到:
就这两个条件了吧。
【 在 LoveSHE (LoveSHE) 的大作中提到: 】
: 进行函数重载时, 要求同名函数在参数个数上不同,或者参数类型上不同。
: 除了这2个条件可以实现重载,还有其他呢
: 貌似网上说:特别注意:返回类型不同不可以作为函数重载的标识。
: ...................
☆─────────────────────────────────────☆
prating (竹下生|久夜|亲亲尾巴爱尾巴) 于 (Wed Nov 26 16:39:28 2008) 提到:
想表达啥呢? 不是很清楚么。。。
【 在 LoveSHE (LoveSHE) 的大作中提到: 】
: 进行函数重载时, 要求同名函数在参数个数上不同,或者参数类型上不同。
: 除了这2个条件可以实现重载,还有其他呢
: 貌似网上说:特别注意:返回类型不同不可以作为函数重载的标识。
: ...................
☆─────────────────────────────────────☆
LoveSHE (LoveSHE) 于 (Wed Nov 26 16:39:46 2008) 提到:
【 在 yegle 的大作中提到: 】
: 是的
: 例如这两个例子
: void output(){
: ...................
噢 呵呵 你回复好快 赞
1.我的意思说那个函数返回类型,貌似也叫函数类型,不能作为重载的条件吗?
2.要实现重载只有上面那2个条件:不同函数参数类型或者个数吗?其他没方法了?
☆─────────────────────────────────────☆
yegle (一阁@SL小分队@lp是大牛) 于 (Wed Nov 26 16:40:35 2008) 提到:
那你先回答,如果编译器看见一个语句调用了output(),编译器怎么知道实际应该调用哪个函数?
【 在 LoveSHE (LoveSHE) 的大作中提到: 】
: 噢 呵呵 你回复好快 赞
: 1.我的意思说那个函数返回类型,貌似也叫函数类型,不能作为重载的条件吗?
: 2.要实现重载只有上面那2个条件:不同函数参数类型或者个数吗?其他没方法了?
: ...................
☆─────────────────────────────────────☆
prating (竹下生|久夜|亲亲尾巴爱尾巴) 于 (Wed Nov 26 16:45:02 2008) 提到:
一个函数就四部分特征 返回类型 函数名 参数类型 参数数量
返回类型不行 后两个可以
还剩啥? 函数名么? 名都不一样了就不用重载了
【 在 LoveSHE (LoveSHE) 的大作中提到: 】
: 噢 呵呵 你回复好快 赞
: 1.我的意思说那个函数返回类型,貌似也叫函数类型,不能作为重载的条件吗?
: 2.要实现重载只有上面那2个条件:不同函数参数类型或者个数吗?其他没方法了?
: ...................
☆─────────────────────────────────────☆
LoveSHE (LoveSHE) 于 (Wed Nov 26 17:01:45 2008) 提到:
【 在 prating 的大作中提到: 】
: 一个函数就四部分特征 返回类型 函数名 参数类型 参数数量
: 返回类型不行 后两个可以
: 还剩啥? 函数名么? 名都不一样了就不用重载了
噢 那就这2个?
我记得有次笔试是3个条件的,然后只选择一个不符合的 所以就来这边问问
☆─────────────────────────────────────☆
sunway (sunway) 于 (Wed Nov 26 17:18:46 2008) 提到:
void fun() const与void fun()也算重载
【 在 LoveSHE (LoveSHE) 的大作中提到: 】
: 噢 那就这2个?
: 我记得有次笔试是3个条件的,然后只选择一个不符合的 所以就来这边问问
☆─────────────────────────────────────☆
rebirthatsix (茫犭者-算法盲) 于 (Wed Nov 26 17:19:45 2008) 提到:
就是这2个
☆─────────────────────────────────────☆
LoveSHE (LoveSHE) 于 (Wed Nov 26 17:36:39 2008) 提到:
【 在 sunway 的大作中提到: 】
: void fun() const与void fun()也算重载
噢 这个也算啊
☆─────────────────────────────────────☆
bupteinstein (相期以茶) 于 (Wed Nov 26 19:31:54 2008) 提到:
在类的成员函数中,const也可以作为重载标志。
如:
class Test
{
bool print(){cout<<"print";}
bool print() const {cout<<"print const";}
}
【 在 LoveSHE 的大作中提到: 】
: 噢 那就这2个?
: 我记得有次笔试是3个条件的,然后只选择一个不符合的 所以就来这边问问
☆─────────────────────────────────────☆
jokerlee (Jackal The Dire) 于 (Wed Nov 26 19:38:49 2008) 提到:
【 在 bupteinstein 的大作中提到: 】
: 在类的成员函数中,const也可以作为重载标志。
: 如:
: class Test
: ...................
那
Test test1;
test1.print()调用的是哪一个呢?
☆─────────────────────────────────────☆
sunway (sunway) 于 (Wed Nov 26 20:20:34 2008) 提到:
非const版本
const Test t;t.print()调用的是const版本
【 在 jokerlee (Jackal The Dire) 的大作中提到: 】
: 那
: Test test1;
: test1.print()调用的是哪一个呢?
: ...................
☆─────────────────────────────────────☆
bingoking (宾果) 于 (Thu Nov 27 00:25:14 2008) 提到:
参数数量有特殊的常参的情况也不行
☆─────────────────────────────────────☆
bingoking (宾果) 于 (Thu Nov 27 00:26:40 2008) 提到:
【 在 bupteinstein 的大作中提到: 】
: 在类的成员函数中,const也可以作为重载标志。
: 如:
: class Test
: ...................
我只知道这是两个不同的函数,不知道是不是重载
☆─────────────────────────────────────☆
WYX (Rockie) 于 (Thu Nov 27 07:01:50 2008) 提到:
发个文献
Thinking in C++, 2nd ed. Volume 1
©2000 by Bruce Eckel
7: Function Overloading & Default Arguments
Overloading on return values
It’s common to wonder, “Why just scopes and argument lists? Why not return values?” It seems at first that it would make sense to also decorate the return value with the internal function name. Then you could overload on return values, as well:
void f();
int f();
This works fine when the compiler can unequivocally determine the meaning from the context, as in int x = f( );. However, in C you’ve always been able to call a function and ignore the return value (that is, you can call the function for its side effects). How can the compiler distinguish which call is meant in this case? Possibly worse is the difficulty the reader has in knowing which function call is meant. Overloading solely on return value is a bit too subtle, and thus isn’t allowed in C++.
【 在 LoveSHE 的大作中提到: 】
: 噢 呵呵 你回复好快 赞
: 1.我的意思说那个函数返回类型,貌似也叫函数类型,不能作为重载的条件吗?
☆─────────────────────────────────────☆
WYX (Rockie) 于 (Thu Nov 27 07:07:51 2008) 提到:
再发个文献,可以去看具体说明
Effective C++
条款21: 尽可能使用const
const成员函数的目的当然是为了指明哪个成员函数可以在const对象上被调用。但很多人忽视了这样一个事实:仅在const方面有不同的成员函数可以重载。这是c++的一个重要特性。再次看这个string类:
class string {
public:
...
// 用于非const对象的operator[]
char& operator[](int position)
{ return data[position]; }
// 用于const对象的operator[]
const char& operator[](int position) const
{ return data[position]; }
private:
char *data;
};
string s1 = "hello";
cout << s1[0]; // 调用非const
// string::operator[]
const string s2 = "world";
cout << s2[0]; // 调用const
// string::operator[]
通过重载operator[]并给不同版本不同的返回值,就可以对const和非const string进行不同的处理:
string s = "hello"; // 非const string对象
cout << s[0]; // 正确——读一个
// 非const string
s[0] = 'x'; // 正确——写一个
// 非const string
const string cs = "world"; // const string 对象
cout << cs[0]; // 正确——读一个
// const string
cs[0] = 'x'; // 错误!——写一个
// const string
另外注意,这里的错误只和调用operator[]的返回值有关;operator[]调用本身没问题。 错误产生的原因在于企图对一个const char&赋值,因为被赋值的对象是const版本的operator[]函数的返回值。
【 在 bingoking 的大作中提到: 】
: 我只知道这是两个不同的函数,不知道是不是重载
☆─────────────────────────────────────☆
LoveSHE (LoveSHE) 于 (Thu Nov 27 10:11:10 2008) 提到:
【 在 WYX 的大作中提到: 】
: 再发个文献,可以去看具体说明
: Effective C++
: 条款21: 尽可能使用const
: ...................
赞
如果Test有两个函数: void fun() {}; void fun() const {},那么Test t; t.fun()调用的是非const的fun, const Test t; t.fun()调用的const的fun
成员函数的const-ness可以做为重载的依据是因为:
对于Test t;t.fun(1),c++实际上会把这转换为C的形式,即 fun(&t,1),这里用到的fun的原型是 void fun(Test *,int),对应于Test的 void fun(int)成员函数. 对于 const Test t;
t.fun(1),转换为fun(&t,1),fun的原型为 void fun(const Test *,int),对应于Test的void fun(int) const成员函数.
上面是sunway的耐心解答:(不像某些人,呵呵)
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Thu Nov 27 10:46:41 2008) 提到:
不就是 参数的 顺序、个数、类型 三个么?
☆─────────────────────────────────────☆
linlantaol (卖伞浪人) 于 (Thu Nov 27 18:29:22 2008) 提到:
c++primer讲的很清楚 还有:
1 除了指针和引用, const不会被认为有类型差别 ,可以归为类型要求
2 产生二意性的不行 比如int a (int, int)和int a(double, double),当用a(42, 2.56)调用时有二意性错误,是调用时的要求
除此之外应该没有了
☆─────────────────────────────────────☆
lblz (砺剑) 于 (Sat Nov 29 17:09:55 2008) 提到:
【 在 yegle 的大作中提到: 】
: 是的
: 例如这两个例子
: void output(){
: ...................
那如果是在这样呢:
void output() { cout<<"NI hao "<<endl; }
int output() { cout<<"Hello"<<endl; return 1; }
int main()
{
int i=output(); //这样编译器能知道么? 算重载么?
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #41166同步于 2010/7/10
CPP机器人发帖
[合集] 关于函数重载的问题,请教!
shenlei
2010/7/10镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。