一、定义和声明
在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; }