C++中的静态成员变量和静态成员函数是什么?

yizhihongxing

静态成员变量和静态成员函数是C++中面向对象编程的一种常见特性。在了解它们之前,我们先简单介绍一下成员变量和成员函数。

成员变量是指声明在类内部的变量,在每个类的对象中都有一份。成员函数也是类的成员,可以访问和修改成员变量,用于实现类的方法和行为。

静态成员变量和静态成员函数都是和类相关联的,而不是和类的每个对象单独相关联的。静态成员变量和静态成员函数可以被类的所有对象和成员函数共享,因此它们的值不取决于类的任何对象。

  1. 静态成员变量

静态成员变量可以被所有对象共享,仅仅被类本身所拥有。静态变量不属于类对象或实例,而是属于类本身,在程序运行时只有一份内存空间,不会重复为每一个类对象分配空间。静态成员变量必须在类外部进行定义和初始化。

示例代码:

#include <iostream>
using namespace std;

class Student {
public:
    Student(string name, int age, float score) {
        this->name = name;
        this->age = age;
        this->score = score;
        count++; // 每次构造一个学生对象,总数加1
    }
    static int count; // 静态成员变量,记录学生总人数
    void display() {
        cout<<"Name: "<<name<<endl;
        cout<<"Age: "<<age<<endl;
        cout<<"Score: "<<score<<endl;
    }
private:
    string name;
    int age;
    float score;
};

int Student::count = 0; // 静态成员变量在类外进行定义和初始化

int main() {
    Student stu1("Tom", 18, 80);
    Student stu2("Jerry", 20, 90);
    cout<<"Total students: "<<Student::count<<endl; // 使用类名来访问静态成员变量
    return 0;
}

在上述代码中,我们定义了一个学生类Student,该类有三个私有成员变量nameagescore。另外,我们还定义了一个静态成员变量count,用于记录学生对象的总数。每次我们构造一个学生对象时,都会使得计数器count的值加1(使用count++语句),最终我们可以通过使用类名来访问静态成员变量Student::count,获取学生总数。

  1. 静态成员函数

静态成员函数没有this指针,不能访问非静态的成员变量和成员函数,只能访问静态的成员变量和成员函数。静态成员函数可以通过类名来直接调用,不需要通过对象来调用。

示例代码:

#include <iostream>
#include <cstring>
using namespace std;

class Person{
public:
    Person(char * name, int age) {
        strcpy(this->name, name);
        this->age = age;
    }

    void display() { // 非静态成员函数,可以访问所有成员变量和函数
        cout<<"Name: "<<name<<endl;
        cout<<"Age: "<<age<<endl;
    }

    static void displayCount() { // 静态成员函数,不能访问非静态的成员变量和成员函数
        cout<<"Total persons: "<<count<<endl;
    }

private:
    char name[20];
    int age;
    static int count; // 静态成员变量,记录人数
};

int Person::count = 0; // 静态成员变量在类外进行定义和初始化

int main()
{
    Person p1("Tom", 18);
    Person p2("Jerry", 20);
    Person::displayCount(); // 使用类名来访问静态成员函数
    return 0;
}

在上述代码中,我们定义了一个人类Person,该类有两个私有成员变量nameage。另外,我们还定义了一个静态成员变量count,用于记录人数,并且还定义了一个静态成员函数displayCount(),用以显示人数。在main()函数中,我们创建了两个人类对象p1p2,并通过使用类名来调用静态成员函数Person::displayCount(),显示人数。

总结下静态成员变量和静态成员函数:

  • 静态成员变量和静态成员函数与类共享,仅仅被类本身所拥有,不需要依赖于具体的类对象。
  • 静态成员函数没有this指针,不能访问非静态的成员变量和成员函数,只能访问静态的成员变量和成员函数。
  • 静态成员变量必须在类外进行定义和初始化,静态成员函数可以用类名直接调用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的静态成员变量和静态成员函数是什么? - Python技术站

(0)
上一篇 2023年4月27日
下一篇 2023年4月27日

相关文章

  • C++中的拷贝构造函数是什么?

    拷贝构造函数是C++中的一种特殊构造函数。它接受一个与当前类相同类型的参数,用于创建一个新的对象并将其初始化为参数对象的副本。通常情况下,拷贝构造函数是一个类的必需构造函数之一,因为它负责复制对象。下面是拷贝构造函数的详细讲解: 一、拷贝构造函数的声明方式 拷贝构造函数的声明方式如下: class ClassName { public: ClassName(…

    cplus 2023年4月27日
    00
  • C++中的throw语句是什么?

    C++中的throw语句说明 什么是throw语句 在C++语言中,当程序执行过程中发生异常时,可以使用throw语句将异常对象抛出。throw语句用于在程序执行时控制权转移到异常处理程序。 throw语句的语法 throw语法格式如下: throw <异常对象>; 其中,异常对象可以是任何类型的表达式或者是表达式的返回值。通常情况下,异常对象应…

    cplus 2023年4月27日
    00
  • C++中的命名空间如何使用?

    我们来详细讲解一下C++中的命名空间如何使用的完整攻略。 什么是命名空间? 当我们开发一个比较大的软件项目时,代码可能会变得十分复杂,函数名、变量名在不同的代码块中会有重复的风险。而命名空间就是一种将相似的代码封装在一起的机制。 命名空间提供了一种逻辑分组的方式,它可以确保在同样的范围内使用不同的标识符名称。简单的说,命名空间就是一个包含类、函数和变量的容器…

    cplus 2023年4月27日
    00
  • 如何创建和使用C++对象?

    创建和使用C++对象主要分为以下步骤: 1. 定义类 在C++中,我们使用类来创建对象。我们需要定义一个类来描述对象的属性和行为。类是一种模板或蓝图,用于创建相同类型和特性的多个对象。定义类时,需要在类的内部定义它的属性和方法。属性(也称为数据成员)描述对象的特征,方法描述对象的行为。 以下是一个简单的类定义: class Person { public: …

    cplus 2023年4月27日
    00
  • C++中的finally语句块是什么?

    C++中并没有finally语句块,finally是Java中的一个关键字,用于定义一个在try-catch语句块结束后一定会执行的语句块,在C++中与之对应的是在析构函数中执行的语句。 在C++中,try-catch语句块用于处理异常,当代码块中发生异常时,程序会开始执行catch语句块中的代码。无论有没有异常发生,try-catch语句块结束后,程序会自…

    cplus 2023年4月27日
    00
  • 如何在C++中实现静态多态性?

    在C++中,静态多态性的实现需要用到模板和函数重载。 模板 模板是C++提供的一种泛型编程机制,可以让程序员编写适用于不同数据类型的函数或类,具有通用性。在使用模板时,需要考虑以下几个方面: 定义模板 在定义模板时,需要使用 template 关键字,后面紧跟着模板参数列表,可以是一个或多个参数,参数间用逗号隔开。模板参数可以是类型、常量或其他模板。 以下是…

    cplus 2023年4月27日
    00
  • C++中的auto关键字是什么?

    C++11引入了 auto 关键字,用于自动推导变量的数据类型。其语法形式为: auto 变量名 = 表达式; 其中,变量名 为定义的变量名,表达式 是一个任意有效的表达式。 使用 auto 关键字可以帮助简化代码,特别是在变量类型较长或较复杂的情况下。 例如: auto i = 1; // 推导为int类型 auto d = 1.0; // 推导为doub…

    cplus 2023年4月27日
    00
  • 如何在C++中实现动态多态性?

    在C++中,动态多态性是通过使用虚函数来实现的。虚函数指的是在基类中定义的函数,如果该函数在派生类中被重新定义,则可以通过指向派生类的指针调用该函数时,实现调用派生类中的函数。这种方法能够实现基于对象类型的多态性,也就是不同派生类对象调用相同基类的虚函数时会执行相应派生类的函数。 具体实现过程如下: 声明一个基类,并在其中定义虚函数。例如: class Sh…

    cplus 2023年4月27日
    00
合作推广
合作推广
分享本页
返回顶部