开发平台(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 的时候发现了这种用法
所以来请问大家的看法