您的位置:

C静态类和非静态类的区别

一、定义和声明

在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;
}