作者OfficeGL (妤欣)
看板C_and_CPP
标题[问题] c++ class 可否多载 class name?
时间Wed Jul 24 17:15:31 2019
开发平台(Platform): (Ex: Win10, Linux, ...)
linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
clang++ -std=c++11
问题(Question):
我目前能多载 operator[] / > / < / + / ...
但我想要多载 class 变数名称
ex.
class Ball {
public:
.......
bool 多载func () {
return (a > b);
}
private:
... ...
int a, b;
}
int main(){
Ball a;
// 我想要多载 a,直接 return boolean value
if( a ) {
}
....
}
目前不知道如何实作
有大大可以分享教学吗~~
谢谢~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.137.108.25 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1563959733.A.36F.html
1F:推 ko27tye: 比较符合你需求的做法是overload operator() 但使用起来07/24 17:24
2F:→ ko27tye: 会像这样--> if(a()){...}07/24 17:25
不行,这不符合需求,这我有想过~
a 不能变成 a()
3F:推 bibo9901: 就 operator bool() 啊XD07/24 17:30
没有很懂><
4F:推 jerryh001: 重载转型成bool的operator?07/24 17:31
5F:→ jerryh001: 慢了XD07/24 17:31
※ 编辑: OfficeGL (114.137.108.25 台湾), 07/24/2019 18:15:50
6F:推 s4300026: 就是if(cin),对吧 XD07/24 18:16
7F:→ Lipraxde: conversion operator07/24 18:16
9F:推 LPH66: if(a) 这种式子会把 a 转型成 bool 再做判断07/24 19:54
10F:→ LPH66: 所以你只要重载当它转型成 bool 时的行为即可07/24 19:54
11F:→ LPH66: 要转成的值即是所有你要使 if(a) 成立的状况07/24 19:55
12F:→ eye5002003: bibo说的就是你想要的07/25 00:57
可以了~~~ 感谢大家帮助
不过我可以在提问一下吗?
conversion operator, ex. operator double() / bool() / int() ..
这样不就根本不需要多载 + - * / && or 了吗~
class ball { /* declare */ }
int main(){
ball a, b;
int sum = a + b; // 这样可以 work 椰!! 我根本没多载 operator +
}
太厉害了~~ 还是我有误会呢
※ 编辑: OfficeGL (114.137.202.175 台湾), 07/25/2019 13:33:34
13F:→ sarafciel: 你要的那个operator+不见得什麽场合都会是整数的+呀XD07/25 13:51
14F:→ sarafciel: 最简单的例子就是std::string07/25 13:53
15F:推 LPH66: 简单讲就是当你的 operator + - * / 等等的运算结果07/25 17:35
16F:→ LPH66: 会需要是某个非内建型态的东西的时候07/25 17:35
17F:→ LPH66: 你不管用什麽中间型态过渡都是没办法的07/25 17:36
18F:→ LPH66: 数的运算的例子例如表示有理数的 class07/25 17:36
19F:→ LPH66: 跟数无关的例如上面提的字串相连07/25 17:37
了解了~~ 非常谢谢解说
※ 编辑: OfficeGL (114.137.202.175 台湾), 07/25/2019 18:31:03
20F:推 CoNsTaR: 看 operator + 还是 operator int 的成本大吧 07/28 12:42