一、定義和聲明
在C++中,類是對有相同屬性和方法的對象的一種抽象。一個類是抽象的,它不能被直接使用,需要先定義一個對象,然後才能使用它。
對於C++中的靜態類和非靜態類,它們之間的一個最明顯的區別,是它們定義和聲明的方式不同。
1.1 非靜態類的定義和聲明
class MyClass{ public: int num; void myFunc(); };
在這個例子中,我們定義了一個名為 MyClass 的非靜態類。該類包含一個名為 num 的公有成員變量和一個名為 myFunc 的公有成員函數。我們需要通過一個對象來訪問這些成員變量和成員函數。
1.2 靜態類的定義和聲明
class MyStaticClass{ public: static int num; static void myFunc(); };
在這個例子中,我們定義了一個名為 MyStaticClass 的靜態類。該類包含一個名為 num 的公有靜態成員變量和一個名為 myFunc 的公有靜態成員函數。我們可以使用類名直接訪問這些成員變量和成員函數,不需要先定義對象。
二、訪問方式
靜態類和非靜態類的另一個區別在於對成員的訪問方式。
2.1 非靜態類的訪問方式
非靜態類的成員變量和成員函數都需要通過一個對象來訪問。
MyClass obj; obj.num = 10; obj.myFunc();
2.2 靜態類的訪問方式
靜態類的成員變量和成員函數可以直接通過類名來訪問。
MyStaticClass::num = 10; MyStaticClass::myFunc();
三、內存分配方式
靜態類和非靜態類的內存分配方式也有所不同。
3.1 非靜態類的內存分配方式
非靜態類的對象在創建時,會在堆棧或者堆上分配內存空間。
MyClass obj;
3.2 靜態類的內存分配方式
靜態類的成員變量和成員函數是所有對象共享的,因此它們在程序運行期間只會被分配一次。
int MyStaticClass::num; void MyStaticClass::myFunc(){ // do something }
四、運行時效率
由於靜態類的成員變量和成員函數只被分配一次,因此在某些情況下,靜態類的訪問可能會更加高效。
4.1 對象過多的情況
在需要創建大量對象的場景下,非靜態類需要為每個對象分配一次內存,而靜態類在程序運行期間只被分配一次。因此,在對象過多的情況下,靜態類的運行效率可能更高。
4.2 頻繁訪問的情況
由於非靜態類的成員變量和成員函數需要通過對象來訪問,而靜態類的成員變量和成員函數可以直接通過類名訪問,因此在頻繁訪問的情況下,靜態類的運行效率可能更高。
五、小結
靜態類和非靜態類的區別在於定義和聲明方式、訪問方式、內存分配方式以及運行時效率。在使用時需要根據實際需要來選擇使用哪種方式。
完整代碼示例
非靜態類示例代碼
class MyClass{ public: int num; void myFunc(); }; void MyClass::myFunc(){ // do something } int main(){ MyClass obj; obj.num = 10; obj.myFunc(); return 0; }
靜態類示例代碼
class MyStaticClass{ public: static int num; static void myFunc(); }; int MyStaticClass::num; void MyStaticClass::myFunc(){ // do something } int main(){ MyStaticClass::num = 10; MyStaticClass::myFunc(); return 0; }
原創文章,作者:EXRRM,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/368707.html