为什么我的这个c 函数重载载不出来,显示的是三个重载函数没有任何一个可以调用

c语言怎么写重载函数?_百度知道系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用。不能作为依据的是,C++选择题回答
来源:网络
关键字: 重载函数
更新时间:
延伸:本文除了聚合《系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用。不能作为依据的是》,免费提供的有关重载函数和C++选择题回答的内容之一,已有不少的网友认为此答案对自己有帮助!获取更多与《》相关的知识。
网友0的回答
A 函数模板 B 模板函数 C 类模板 D 模板类 11、系统在调用重载函数时,5a8往根据一些条件确定网友1的回答
其主要的依据是函数韵名字,参数的类型,函数的返回值类型。重载函数是函数的一种特殊情况,为方便使用,C网友2的回答
c错。函数名字不可以作为依据,因为重载本身就可以使用相同的函数名,那就不能区分了,其他三个选项都可以网友1的回答
函数中参数的个数和类型,个数要保证在有默认参数时个数也是不同的,根据返回值无法辨认。网友0的回答
b 返回类型 不能作为重载函数的依据,因为函数的返回值并不是总是用到,所以不能作为重载依据。 关于a网友1的回答
函5a8签名,即函数名和函数参数共同决定……网友2的回答
肯定是C是错误的 参数个数,参数类型 只要一个不同,就能重载啊网友1的回答
D D网友0的回答
重载函数调用时依据的是参数的个数和类型,与函数的返回值没有关系!网友1的回答
最满意的回答
猜你感兴趣
回答问题赢iPhone 65195人阅读
C/C++(57)
13:25:31 别逗了问个问题:1。C++中为什么不允许通过返回类型重载函数?2。为什么不允许通过返回类型解析模板函数?
14:47:55 完美废人返回类型是一种可有可无的东西……
16:41:23 完美废人瞧见什么叫高手了吧
18:32:46 别逗了那operator type()怎么说?不是根据返回值判断调用那个函数的吗?
18:34:49 完美废人void f();int f();f(); //which one to go?
18:35:18 别逗了增加一条规则就是了。
18:35:27 无锋之刃啊哈!
18:35:31 完美废人怎么描述?
18:35:53 完美废人type-cast operators are individual functions, not the same one with diff return type
18:39:11 别逗了void f();int f();之间只是存在歧义,当出现歧义的时候,按照C++的习惯,制定一个最佳匹配规则。规则不行的时候,扩展语法, 调用形式: f()或者f()
18:39:37 完美废人手工确认调用哪个函数?那还要重载干吗?
18:39:44 完美废人而且
18:39:57 无锋之刃最佳匹配规则上说你这两个选择一样地好……
18:39:58 完美废人void f() 和 int f();,没有重载规则可以达到调用 void f();
18:40:13 别逗了那问题是,可以判别的时候,就不用指定了啊.
18:40:32 无锋之刃那问题是,没有办法 判别。
18:40:39 完美废人为了这么一点方便?我不如直接写 void f_void(); 和 int f_int(); 算了
18:41:03 别逗了那你放到模板里面怎么办?
18:41:27 完美废人拜托了大哥,尽量简化问题是每个程序员应尽的义务
18:41:43 别逗了调用形式作一个扩展不行?例如f()
18:41:57 完美废人f() 和 f(); 怎么区别?
18:42:06 别逗了指定返回值是void的f().
18:42:15 完美废人我直接 f(); 就会有二义性错误
18:42:21 别逗了对.
18:42:23 完美废人这样的语法,还不如不用重载
18:42:43 无锋之刃这是历史的倒退。
18:42:52 别逗了问题是,加了这个,对你以前的重载有影象吗?
18:43:11 别逗了你以前的代码规则照样起作用.
18:43:57 别逗了你完全可以不通过返回值重载函数---只有需要的人才会用到这个功能.
18:44:11 别逗了为什么就倒退了?
18:44:25 完美废人struct base{& virtual void f();};struct d:public base{& void f();& int f();};base * p =p-&f(); ??
18:44:45 无锋之刃编译器无法通过返回类型来判断应该调用哪个函数。链接器也是。
18:45:20 别逗了首先,你按照新的规则,定义了一对重载函数,却指望按照老的方式调用,当然不行.
18:45:49 完美废人如果没有 struct d,我的老规则完全适用
18:45:51 无锋之刃那什么是新的调用方式?
18:45:52 别逗了我的意思,增加了新的规则,你的老的重载方式,还是像以前一样工作.
18:46:02 完美废人除非你规定,所有的 void f(); 都必须改成 f() 这样调用
18:46:07 别逗了p-&f()或者
18:46:12 别逗了p-&f()
18:46:26 完美废人struct S{& void f(); //how to call?};
18:46:30 无锋之刃那我还不如写p-&f_int()呢。搞那么复杂。
18:46:41 完美废人这个重载完全没有意义
18:47:07 别逗了好,我举个有意义的例子给你.
18:48:20 完美废人plz
18:48:27 别逗了max(T1& lhs, T2& rhs){& //应该返回什么类型?}int i = max(2, 3.3);double d = max(2, 3.3);&
18:48:51 别逗了这是内部类型,可以互相转换,如果是自定义类型呢?
18:49:05 别逗了max应该返回什么类型?
18:49:08 完美废人自定义类型怎么能进行比较?
18:49:17 完美废人如果能比较,就应该能转化
18:49:27 别逗了我的自定义类型定了了less不可以阿?
18:49:39 完美废人你试试看。
18:51:17 别逗了例如我定义了dec类型和money类型。返回值需要做转换,转换可能丢失精度。如果不需要转换,那就没有这个问题。
18:52:41 完美废人所以你有dec max(const dec &, const money &);和money max(const dec &, const money &): ?
18:54:00 完美废人1、建议你看看 C++0x 的 typeof2、不论什么时候,重载决断是编译器的,不存在动态联编,所以根据返回值重载不切实际。
18:54:21 别逗了对。我的money类型是定点数,在进行数学运算的时候,有时候需要转换成dec类型,以防止中间运算过程的精度误差。算完了,还要转换回来。
18:54:30 完美废人2、不论什么时候,重载决断是编译器的,不存在动态联编,所以根据返回值重载不切实际。 &
18:55:03 别逗了呵呵,我要的就是决断是编译器的。
18:55:07 完美废人这个地方,你不如用 enum 好了。
18:55:13 完美废人抱歉,我是说 union
18:55:28 别逗了union和我的问题有啥关系?
18:55:56 完美废人typedef union {dec, money} rt_t;rt_t max (const money &, const dec &);
18:56:36 别逗了靠,这不行的,这可真的运行期判决了。
18:56:37 完美废人对 money 和 dec 设计用 NullObject 作为默认值,可以用来检查 rt_t 的值
18:56:50 完美废人你不靠运行期决断,返回值就不存在意义。
18:57:21 完美废人infile && m &&max(m, d); ??
18:57:34 别逗了谁说得?先确定一下,你不反对我要返回不同类型的数据了吧?
18:57:44 完美废人反对。
18:57:56 完美废人强烈反对用 union 这么变态的东西
18:58:02 别逗了好,那一个个问题来。
18:58:10 benbear强烈反对废人此观点
18:58:21 别逗了首先,我才不要返回union 。
18:58:21 完美废人我有一个很好的解决办法
18:58:31 完美废人想不想听?
18:58:38 别逗了我要返回的就是money或者是dec
18:58:56 完美废人std::pair 作为返回好了,哈哈。
18:59:43 benbear你试过dec max(const dec &, const money &);和money max(const dec &, const money &):能通过编译吗?
18:59:47 别逗了一样没用。你怎么知道返回值是什么类型?返回两个?那你怎么知道该用那个?
19:00:06 完美废人把不是返回值的一个指针作为 0
19:00:17 完美废人这是为什么我用指针而不是引用的原因
19:00:22 完美废人指针有 NullObject
19:00:26 别逗了我知道不能,所以我才不满意C++强加的限制。
19:01:01 别逗了越来越垃圾的设计了。[shake]
19:01:12 完美废人总比越来越垃圾的语言好[:D]
19:01:28 完美废人荼毒你一个,幸福俺大家
19:01:32 别逗了怎么垃圾了,我说得新特性你可以不用啊。
19:01:46 完美废人那么你告诉我,怎么调用 basd::virtual void f(); ??
19:02:22 完美废人我真的可以对一个void func (base * p){& p-&func(); //不是 p-&func() ?}
19:02:47 完美废人没有什么东西是没有代价的。
19:03:21 别逗了你不是不用嘛,干吗要通过返回值重载?只要你不仅仅通过返回值重载(这是现状),就不必知道新特性。但是,你需要仅仅通过返回值重载,你就需要新特性。
19:03:41 完美废人我当然不用!但是我不能保证从我的类派生的家伙们不用!
19:04:07 完美废人作为一个接口基类,我必须把一切该死的可能性都考虑进去
19:04:35 别逗了OK.那么,、先确认一点:新特性对既有的代码,不需要修改,同意不?
19:04:52 完美废人不同意
19:05:03 别逗了那你举例反对。
19:05:45 完美废人struct Base{virtual void fun();}; void f(const Base * p){& p-&fun(); //你要我抄多少遍?}
19:07:29 别逗了很显然,这是调用void fun()啊。现有规则就能解决。如果派生类定义了同名的,而类型不同,那就是同名覆盖,而不是重载。
19:08:11 完美废人好,某个 newbie 写了struct Derived : public Base{& virtual void fun();& virtual int fun();};如何??
19:08:31 别逗了这个在现有规则下合法吗?
19:09:00 完美废人我的基类是旧规则的,但是这个 newbie 是学习新规则长大的,如何?旧的代码已经不能通用了!
19:09:48 别逗了靠,newbie写的是新代码!他既没有遵守旧规则,也没有遵守新规则!
19:10:09 完美废人他为什么没有遵守新规则?很漂亮的 rt-overload
19:10:32 别逗了让我想想。
19:11:57 完美废人:)恭候。
19:14:17 别逗了OK。这里只能调用void fun(),因为,virtual void fun();& virtual int fun();是两个函数。而Base当中根本就不认识virtual int fun();所以,你老的代码f(const Base * p)只有一种选择,就是原来的那一个。&
19:14:47 别逗了所以,这里没有任何问题。[:D]
19:15:05 无锋之刃[?]
19:15:15 完美废人呵呵,有道理。
19:15:28 完美废人刀子,替我砍!
19:15:45 无锋之刃你去弄个砧板来
19:15:48 别逗了好啊,继续,我接着。
19:16:34 完美废人那么,如果 struct Base 放在新规则下,我就必须写 p-&fun() 了?
19:18:12 别逗了不必。只有在老规则不能分辨的时候才需要这样写。例如:long f(int);char f(char);不需要写成f(10)
19:19:10 完美废人struct Base{ virtual void fun(); };struct Derived : public Base{ virtual int fun(); };算是隐藏?
19:19:30 完美废人这个在现有模式下是怎么处理的?
19:19:33 别逗了但是也有部分地方会有问题,就是没有一个是匹配的,但是存在两个同样优先级的转换时。
19:19:50 完美废人这个从来都存在问题……无奈了
19:20:03 完美废人我上次写那个 bi_map,都差点放弃重载了
19:20:37 别逗了1。现有模式不能只通过返回值区分重载。2。如果你的参数不同,那么,这两个函数覆盖。
19:21:23 完美废人都是 (void) 的时候,发生的是覆盖、修改接口、还是??
19:21:34 别逗了覆盖。
19:21:44 别逗了错了。
19:21:50 完美废人到底是……?
19:21:52 别逗了怎么都是void?
19:22:11 完美废人int f(void); 和 派生类的 void f(void); 或者相反。
19:22:21 无锋之刃你们在讨论虾米……
19:22:22 别逗了是这样:覆盖
19:22:42 完美废人这个东西我是没法明白了……刀子或者鸡丁还有希望:(
19:22:52 别逗了倒!
19:23:01 无锋之刃《EC》上说“绝对不要重新定义继承而来的非虚函数”……
19:23:17 别逗了是啊。
19:23:23 完美废人struct Base{ virtual void fun(); };struct Derived : public Base{ virtual int fun(); };
19:23:26 无锋之刃那……
19:23:30 完美废人struct Base{ virtual void fun(); };struct Derived : public Base{ virtual int fun(); };
19:23:30 别逗了但是,语言则要考虑到。
19:23:34 完美废人两个函数签名相同啊,怎么会是覆盖的?
19:24:00 无锋之刃返回值类型是不会被Name-mangling机制处理的。
19:24:18 完美废人所以应是一般的派生类重写而已
19:24:23 别逗了晕倒,签名规则不可以变啊?况且,签名规则根本就是和编译没太大关系得,连接系统关系比较大而以。
19:24:38 完美废人我现在是说传统 C++……
19:24:45 无锋之刃你把你的想法提交C++ Standard Commitee,也许有可能……
19:24:46 完美废人不了解过去就无法预测将来
19:26:06 别逗了我好像在那里看到过说为什么不能通过返回值重载的,但是,我实在是想不起来任何线索了。
19:26:24 完美废人别逗了:这两个函数签名相同,不可能是覆盖……
19:26:49 无锋之刃也不可能是重载,因为参数列表一样。
19:27:05 完美废人本来就不可能,因为是在不同的 class scope
19:27:14 完美废人所以只能是重写了。
19:27:32 无锋之刃重定义。
19:27:33 别逗了函数签名不包括返回值?那dump出来的dll中怎么解析我的返回值类型的?
19:27:59 完美废人dump 出来的 dll 还支持 const char * 到函数的映射呢……
19:29:41 别逗了不要搞,我问你:int CppUnit::CompilerOutputter::wrapColumn(void)Name-mangling之后怎么知道返回值是int而不是void的?
19:29:52 完美废人不知道。
19:30:09 完美废人返回值和 name mangling 无关
19:31:09 别逗了int CppUnit::CompilerOutputter::wrapColumn(void)是我用depends从dll中导出的函数名。这是C函数名:你是这里面没有返回值信息?
19:31:29 完美废人我没看到 int 啊
19:31:44 别逗了那时你不知道怎么解码。
19:32:11 完美废人呵呵:)这是一句没有说服力的反驳
19:32:11 无锋之刃在C中调用C++的函数,要在C++代码中使用extern "C"来禁止重载的……
19:33:05 别逗了晕倒,我刚才的两个名字就是同一个,只不过depends能够解码成int CppUnit::CompilerOutputter::wrapColumn(void)这样可以读的格式。
19:33:26 无锋之刃那也只是凑巧……
19:33:36 完美废人呵呵~这是用结论逆推理论。
19:33:58 别逗了什么凑巧,C++的dll全都是这样的,自己可用depends去看。
19:34:30 无锋之刃别在Dll中使用太多重载,不然会死得很惨的。
19:34:34 别逗了我的意思是:Name-mangling不过是一种实作手段而以。
19:34:48 完美废人我没有 depends。逆试试struct { int f();}struct { void f();}有没有区别
19:35:07 无锋之刃但是为什么编译器厂商都没有把你想的实作出来呢?
19:35:23 别逗了你不是用vc的吗?怎么没有depends?
19:35:29 完美废人不知道:(
19:35:52 别逗了depends.exe没有?晕倒!
19:36:11 完美废人好像没装 vc-tools 的说……
19:36:13 无锋之刃C++编译出的Dll在Console下怎么调用?
19:36:24 完美废人LoadLibrary
19:36:30 别逗了可以得。
19:36:33 无锋之刃又一个API……
19:36:40 无锋之刃[:8]
19:36:55 别逗了C编译出的dll难道不需要?
19:37:07 完美废人我正在看 CreateRemoteThread,居然被别逗了老兄拉来侃这个……
19:37:28 别逗了玩那个干吗?
19:37:41 完美废人为了他*妈*的造福人民,调试病毒用。
19:38:01 无锋之刃传说中尝遍百草的废人……
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:297857次
积分:3745
积分:3745
排名:第6082名
原创:69篇
评论:321条
(1)(1)(3)(5)(1)(1)(1)(1)(2)(1)(2)(2)(1)(10)(15)(5)(5)(4)(2)(1)(2)(5)(5)(2)
() () () () ()javascript函数能重载吗?_百度知道

我要回帖

更多关于 java 函数重载 的文章

 

随机推荐