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

原创文章,作者:EXRRM,如若转载,请注明出处:https://www.506064.com/n/368707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
EXRRMEXRRM
上一篇 2025-04-12 01:13
下一篇 2025-04-12 01:13

相关推荐

  • Python中new和init的区别

    new和init都是Python中常用的魔法方法,它们分别负责对象的创建和初始化,本文将从多个角度详细阐述它们的区别。 一、创建对象 new方法是用来创建一个对象的,它是一个类级别…

    编程 2025-04-29
  • Sublime Test与Python的区别

    Sublime Text是一款流行的文本编辑器,而Python是一种广泛使用的编程语言。虽然Sublime Text可以用于编写Python代码,但它们之间有很多不同之处。接下来从…

    编程 2025-04-29
  • Shell脚本与Python脚本的区别

    本文将从多个方面对Shell脚本与Python脚本的区别做详细的阐述。 一、语法差异 Shell脚本和Python脚本的语法存在明显差异。 Shell脚本是一种基于字符命令行的语言…

    编程 2025-04-29
  • Centos7配置静态ip

    本文将详细阐述如何在Centos7系统中配置静态ip。 一、查看网络接口 在配置静态ip之前,我们首先需要查看系统中的网络接口,以确定我们需要配置的网卡是哪一个。 ifconfig…

    编程 2025-04-29
  • Python中while语句和for语句的区别

    while语句和for语句是Python中两种常见的循环语句,它们都可以用于重复执行一段代码。然而,它们的语法和适用场景有所不同。本文将从多个方面详细阐述Python中while语…

    编程 2025-04-29
  • Web程序和桌面程序的区别

    Web程序和桌面程序都是进行软件开发的方式,但是它们之间存在很大的区别。本文将从多角度进行阐述。 一、运行方式 Web程序运行于互联网上,用户可以通过使用浏览器来访问它。而桌面程序…

    编程 2025-04-29
  • TensorFlow和Python的区别

    TensorFlow和Python是现如今最受欢迎的机器学习平台和编程语言。虽然两者都处于机器学习领域的主流阵营,但它们有很多区别。本文将从多个方面对TensorFlow和Pyth…

    编程 2025-04-28
  • 麦语言与Python的区别

    麦语言和Python都是非常受欢迎的编程语言。它们各自有自己的优缺点和适合的应用场景。本文将从语言特性、语法、生态系统等多个方面,对麦语言和Python进行详细比较和阐述。 一、语…

    编程 2025-04-28
  • MySQL bigint与long的区别

    本文将从数据类型定义、存储空间、数据范围、计算效率、应用场景五个方面详细阐述MySQL bigint与long的区别。 一、数据类型定义 bigint在MySQL中是一种有符号的整…

    编程 2025-04-28
  • Python与C语言的区别和联系

    Python与C语言是两种常用的编程语言,虽然两者都可以用于编写软件程序,但是它们之间有很多不同之处。本文将从多个方面对Python与C语言的区别和联系进行详细的阐述。 一、语法特…

    编程 2025-04-28

发表回复

登录后才能评论