[問題] 關於 static member function 的問題
開發平台(Platform): (Ex: Win10, Linux, ...)
windows11
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
Visual Studio 2022
有兩個矩形 class
其中算周長的函式
一個是用一般成員函式
另一個是用靜態成員函式
但這個靜態成員函式的用法我是第一次看到
只要把物件自己的指標傳進去
靜態成員函式就可以使用 private 的一般成員變數了耶!!
連 Get 函式都可以不用
根本就跟一般成員函式一樣
C++ 程式碼如下:
class Rectangle01
{
private:
int width;
int height;
public:
Rectangle01(int width, int height) {
this->width = width;
this->height = height;}
int Perimeter() { return width * 2 + height * 2;}
};
class Rectangle02
{
private:
int width;
int height;
public:
Rectangle02(int width, int height) {
this->width = width;
this->height = height;}
static int Perimeter(Rectangle02 *pRec02) {
return pRec02->width * 2 + pRec02->height * 2; }
};
int main()
{
Rectangle01 *pRec01 = new Rectangle01(10, 20);
cout << pRec01->Perimeter() << endl;//60
Rectangle02 *pRec02_1 = new Rectangle02(100, 200);
cout << Rectangle02::Perimeter(pRec02_1) << endl;//600
Rectangle02 *pRec02_2 = new Rectangle02(200, 300);
cout << Rectangle02::Perimeter(pRec02_2) << endl;//1000
delete pRec01;
delete pRec02_1;
delete pRec02_2;
system("pause");
return 0;
}
我知道靜態成員函式只能存取靜態成員變數
不需要 new 出物件也能被呼叫
所以不能用 this
也不能存取一般成員變數
講到靜態成員函式
查資料都說是都說是獨立於物件之外配置的記憶體空間
不管 new 出幾個物件
都是「使用同一個記憶體空間」
也就說靜態成員函式比一般成員函式省空間(嗎?)
另外我也測量過執行時間
迴圈1千萬次執行 new、呼叫 Perimeter 函式、delete
程式各執行10次的平均值
Rectangle01 是 2607.129 ms
Rectangle02 是 2709.032 ms
沒有差很多
問題一
時間上沒有差很多
但如果真能省空間
把所有的一般成員函式通通改成靜態的
超省空間的是不是!!
講得我都想買了
那為什麼沒看見有人這樣做呢?
是會有其他什麼潛在的問題嗎?
問題二
前面提過
靜態成員函式是獨立於物件之外配置的記憶體空間
不管 new 出幾個物件
都是「使用同一個記憶體空間」
所以真的會比一般成員函式省空間嗎?
要怎麼看出物件占多少空間這件事?
先說我自己是沒有這樣用過
只是研究 static 的時候發現了這種用法
所以來請問大家的看法
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.76.138.36 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1641557720.A.DF9.html
→
01/07 20:32,
2年前
, 1F
01/07 20:32, 1F
→
01/07 21:51,
2年前
, 2F
01/07 21:51, 2F
→
01/07 21:51,
2年前
, 3F
01/07 21:51, 3F
→
01/07 21:52,
2年前
, 4F
01/07 21:52, 4F
推
01/07 22:08,
2年前
, 5F
01/07 22:08, 5F
→
01/07 22:15,
2年前
, 6F
01/07 22:15, 6F
→
01/07 22:15,
2年前
, 7F
01/07 22:15, 7F
推
01/07 23:53,
2年前
, 8F
01/07 23:53, 8F
→
01/07 23:53,
2年前
, 9F
01/07 23:53, 9F
→
01/08 00:24,
2年前
, 10F
01/08 00:24, 10F
→
01/08 00:24,
2年前
, 11F
01/08 00:24, 11F
→
01/08 00:24,
2年前
, 12F
01/08 00:24, 12F
→
01/08 00:26,
2年前
, 13F
01/08 00:26, 13F
推
01/08 04:47,
2年前
, 14F
01/08 04:47, 14F
→
01/08 04:47,
2年前
, 15F
01/08 04:47, 15F
→
01/08 04:47,
2年前
, 16F
01/08 04:47, 16F
→
01/08 04:47,
2年前
, 17F
01/08 04:47, 17F
推
01/08 07:18,
2年前
, 18F
01/08 07:18, 18F
→
01/08 11:58,
2年前
, 19F
01/08 11:58, 19F
→
01/08 11:58,
2年前
, 20F
01/08 11:58, 20F
→
01/08 12:44,
2年前
, 21F
01/08 12:44, 21F
→
01/08 12:44,
2年前
, 22F
01/08 12:44, 22F
推
01/08 17:51,
2年前
, 23F
01/08 17:51, 23F
→
01/08 17:51,
2年前
, 24F
01/08 17:51, 24F
→
01/08 23:06,
2年前
, 25F
01/08 23:06, 25F
→
01/08 23:06,
2年前
, 26F
01/08 23:06, 26F
→
01/08 23:07,
2年前
, 27F
01/08 23:07, 27F
推
01/09 19:55,
2年前
, 28F
01/09 19:55, 28F
→
01/09 19:55,
2年前
, 29F
01/09 19:55, 29F
→
01/10 00:04,
2年前
, 30F
01/10 00:04, 30F
→
01/10 00:05,
2年前
, 31F
01/10 00:05, 31F
→
01/10 01:51,
2年前
, 32F
01/10 01:51, 32F
→
01/10 01:52,
2年前
, 33F
01/10 01:52, 33F
推
01/10 16:02,
2年前
, 34F
01/10 16:02, 34F
→
01/10 16:02,
2年前
, 35F
01/10 16:02, 35F
→
01/10 16:02,
2年前
, 36F
01/10 16:02, 36F
推
01/10 21:31,
2年前
, 37F
01/10 21:31, 37F
→
01/10 21:31,
2年前
, 38F
01/10 21:31, 38F
→
01/10 21:31,
2年前
, 39F
01/10 21:31, 39F
→
01/10 21:31,
2年前
, 40F
01/10 21:31, 40F
→
01/10 21:31,
2年前
, 41F
01/10 21:31, 41F
推
01/10 22:13,
2年前
, 42F
01/10 22:13, 42F
→
01/10 22:13,
2年前
, 43F
01/10 22:13, 43F
→
01/10 22:13,
2年前
, 44F
01/10 22:13, 44F
→
01/10 22:13,
2年前
, 45F
01/10 22:13, 45F
推
01/10 23:05,
2年前
, 46F
01/10 23:05, 46F
→
01/10 23:05,
2年前
, 47F
01/10 23:05, 47F
→
01/10 23:05,
2年前
, 48F
01/10 23:05, 48F
→
01/10 23:07,
2年前
, 49F
01/10 23:07, 49F
→
01/10 23:07,
2年前
, 50F
01/10 23:07, 50F
→
01/10 23:07,
2年前
, 51F
01/10 23:07, 51F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章