[問題] 有關class的一個問題

看板C_and_CPP作者 (無聊的書)時間6年前 (2018/01/07 11:29), 6年前編輯推噓5(6129)
留言36則, 8人參與, 6年前最新討論串1/1
開發平台(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拿出去獨立運作 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.251.81.113 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1515295776.A.891.html

01/07 11:43, 6年前 , 1F
請用 static member function
01/07 11:43, 1F

01/07 11:46, 6年前 , 2F
請愛用namespace
01/07 11:46, 2F
我知道但是裡面其實沒這麼簡單我也跟他講過用static 連帶好幾個function都要跟著static 直接抽出來比較快 namespace跟這個應該沒關係吧 ※ 編輯: ahabook (111.251.81.113), 01/07/2018 11:59:52 ※ 編輯: ahabook (111.251.81.113), 01/07/2018 12:00:34

01/07 12:03, 6年前 , 3F
這種設計很語意不明 一個member function不做member
01/07 12:03, 3F

01/07 12:03, 6年前 , 4F
varible的計算 那一開始就不是method的概念
01/07 12:03, 4F

01/07 12:04, 6年前 , 5F
只要namespace CTEST { int Add(int a, int b);}
01/07 12:04, 5F

01/07 12:04, 6年前 , 6F
使用上 sum = CTEST::add(x,y);
01/07 12:04, 6F

01/07 12:05, 6年前 , 7F
同時可以表明空間又不需要多次實體化
01/07 12:05, 7F

01/07 12:08, 6年前 , 8F
基本上像原PO這種寫法很大比例都是原本寫java的
01/07 12:08, 8F

01/07 12:52, 6年前 , 9F
用 namespace包就好了吧
01/07 12:52, 9F

01/07 12:53, 6年前 , 10F
ctest跟 add有啥關係嗎 還是你有要用object 擁有的什
01/07 12:53, 10F

01/07 12:53, 6年前 , 11F
麼物件嗎
01/07 12:53, 11F

01/07 12:54, 6年前 , 12F
而且例子看起來也很詭異
01/07 12:54, 12F
其實完全無關係 我看過了就算獨立 這是很老的程式之前人寫的 只是新人說 同樣的東西他不想再寫一次想直接呼叫

01/07 15:40, 6年前 , 13F
undefined behavior
01/07 15:40, 13F

01/07 15:41, 6年前 , 14F
可以運作的原因是C++並不檢查instance的型態 裡面也剛好
01/07 15:41, 14F

01/07 15:41, 6年前 , 15F
沒有用到this
01/07 15:41, 15F

01/08 10:28, 6年前 , 16F
有遇過設計需要有 polymorphism 並牽涉到另外兩個
01/08 10:28, 16F

01/08 10:28, 6年前 , 17F
instance 的運算,就會用這種做法。不知道有沒有更好
01/08 10:28, 17F

01/08 10:28, 6年前 , 18F
的方式,但是 namespace 和 static 都不適用
01/08 10:28, 18F

01/08 10:56, 6年前 , 19F
樓上能舉個例子嗎?
01/08 10:56, 19F

01/08 11:04, 6年前 , 20F
undefined行為就是undefined行為,哪裡能這樣用
01/08 11:04, 20F

01/08 11:06, 6年前 , 21F
類似 strategy。另外我指的是 static/namespace,不是
01/08 11:06, 21F

01/08 11:07, 6年前 , 22F
call memfun of uninit pointer 這件事 XD
01/08 11:07, 22F

01/08 11:09, 6年前 , 23F
我還是不知道你要什麼,能用函數指標或functor改寫嗎
01/08 11:09, 23F

01/08 11:13, 6年前 , 24F
strategy可用函數指標,bridge可用functor
01/08 11:13, 24F

01/08 11:24, 6年前 , 25F
algorithm 的 interface 不止一個 function,而且其中
01/08 11:24, 25F

01/08 11:24, 6年前 , 26F
一個 funciton 沒用到 member variabe,可能其他會用到
01/08 11:24, 26F

01/08 11:25, 6年前 , 27F
之類的...當時我是包成一個 class 啦
01/08 11:25, 27F

01/08 11:38, 6年前 , 28F
不用動態修改的話可以把成員函數改寫成functor,必要
01/08 11:38, 28F

01/08 11:39, 6年前 , 29F
時成員設計成reference
01/08 11:39, 29F

01/08 11:40, 6年前 , 30F
外界使用起來只會當它是成員函數
01/08 11:40, 30F

01/08 11:51, 6年前 , 31F
其實用 std::function 還是可以動態修改?哈哈
01/08 11:51, 31F

01/08 11:51, 6年前 , 32F
最主要是看到前幾樓,想到之前無法使用 static/ns 最大
01/08 11:51, 32F

01/08 11:52, 6年前 , 33F
的原因是無法 dynamic binding
01/08 11:52, 33F

01/08 12:00, 6年前 , 34F
static data + operator()設計成virtual
01/08 12:00, 34F

01/08 12:01, 6年前 , 35F
把介面與實作切開,實作讓它走dynamic binding
01/08 12:01, 35F

01/08 16:15, 6年前 , 36F
static會連帶好幾個都static 那這樣就不該用static
01/08 16:15, 36F
※ 編輯: ahabook (61.216.156.247), 01/09/2018 17:30:35
文章代碼(AID): #1QKPGWYH (C_and_CPP)