作者:
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的
用 namespace包就好了吧ctest跟 add有啥關係嗎 還是你有要用object 擁有的什麼物件嗎而且例子看起來也很詭異
作者:
bibo9901 (function(){})()
2018-01-07 15:40:00undefined behavior可以運作的原因是C++並不檢查instance的型態 裡面也剛好沒有用到this
作者:
carylorrk (carylorrk)
2018-01-08 10:28:00有遇過設計需要有 polymorphism 並牽涉到另外兩個instance 的運算,就會用這種做法。不知道有沒有更好的方式,但是 namespace 和 static 都不適用
undefined行為就是undefined行為,哪裡能這樣用
作者:
carylorrk (carylorrk)
2018-01-08 11:06:00類似 strategy。另外我指的是 static/namespace,不是call memfun of uninit pointer 這件事 XD
我還是不知道你要什麼,能用函數指標或functor改寫嗎strategy可用函數指標,bridge可用functor
作者:
carylorrk (carylorrk)
2018-01-08 11:24:00algorithm 的 interface 不止一個 function,而且其中一個 funciton 沒用到 member variabe,可能其他會用到之類的...當時我是包成一個 class 啦
不用動態修改的話可以把成員函數改寫成functor,必要時成員設計成reference外界使用起來只會當它是成員函數
作者:
carylorrk (carylorrk)
2018-01-08 11:51:00其實用 std::function 還是可以動態修改?哈哈最主要是看到前幾樓,想到之前無法使用 static/ns 最大的原因是無法 dynamic binding
static data + operator()設計成virtual把介面與實作切開,實作讓它走dynamic binding
作者:
y3k (激流を制するは静水)
2018-01-08 16:15:00static會連帶好幾個都static 那這樣就不該用static