[問題] 有關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