[问题] 有关class的一个问题

楼主: ahabook (无聊的书)   2018-01-07 11:29:33
开发平台(Platform): (Ex: Win10, Linux, ...)
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
class CTest
{
void CTest()
void ~CTest()
public:
int Add(int a,int b)
{
return a+b;
}
}
补充说明(Supplement):
以我的经验
我都会
CTest *p;
p =new CTest ;
int sum= p->Add(1,2);
delete p;
但是我家的新人这样写
CTest *p;
int sum= p->Add(1,2);
居然也可以运作
我觉得怪怪的但是无法说明为何不行
对了触发的点是例外一个class的建构式
另外一个class又在CTest的成员里面
所以我的写法会变成无穷循环
一般我会建议把这个function拿出去独立运作
作者: longlongint (华哥尔)   2018-01-07 11:43:00
请用 static member function
作者: Ommm5566 (56天團)   2018-01-07 11:46:00
请爱用namespace这种设计很语意不明 一个member function不做membervarible的计算 那一开始就不是method的概念只要namespace CTEST { int Add(int a, int b);}使用上 sum = CTEST::add(x,y);同时可以表明空间又不需要多次实体化基本上像原PO这种写法很大比例都是原本写java的
作者: steve1012 (steve)   2018-01-07 12:52:00
用 namespace包就好了吧ctest跟 add有啥关系吗 还是你有要用object 拥有的什么物件吗而且例子看起来也很诡异
作者: bibo9901 (function(){})()   2018-01-07 15:40:00
undefined behavior可以运作的原因是C++并不检查instance的型态 里面也刚好没有用到this
作者: carylorrk (carylorrk)   2018-01-08 10:28:00
有遇过设计需要有 polymorphism 并牵涉到另外两个instance 的运算,就会用这种做法。不知道有没有更好的方式,但是 namespace 和 static 都不适用
作者: Sidney0503 (Sidney0503)   2018-01-08 10:56:00
楼上能举个例子吗?
作者: loveflames (咕啾咕啾魔法阵)   2018-01-08 11:04:00
undefined行为就是undefined行为,哪里能这样用
作者: carylorrk (carylorrk)   2018-01-08 11:06:00
类似 strategy。另外我指的是 static/namespace,不是call memfun of uninit pointer 这件事 XD
作者: loveflames (咕啾咕啾魔法阵)   2018-01-08 11:09:00
我还是不知道你要什么,能用函数指标或functor改写吗strategy可用函数指标,bridge可用functor
作者: carylorrk (carylorrk)   2018-01-08 11:24:00
algorithm 的 interface 不止一个 function,而且其中一个 funciton 没用到 member variabe,可能其他会用到之类的...当时我是包成一个 class 啦
作者: loveflames (咕啾咕啾魔法阵)   2018-01-08 11:38:00
不用动态修改的话可以把成员函数改写成functor,必要时成员设计成reference外界使用起来只会当它是成员函数
作者: carylorrk (carylorrk)   2018-01-08 11:51:00
其实用 std::function 还是可以动态修改?哈哈最主要是看到前几楼,想到之前无法使用 static/ns 最大的原因是无法 dynamic binding
作者: loveflames (咕啾咕啾魔法阵)   2018-01-08 12:00:00
static data + operator()设计成virtual把接口与实作切开,实作让它走dynamic binding
作者: y3k (激流を制するは静水)   2018-01-08 16:15:00
static会连带好几个都static 那这样就不该用static

Links booklink

Contact Us: admin [ a t ] ucptt.com