C++中静态成员和动态(实例)成员

1. 静态成员 (Static Members)

静态成员属于类本身,而不是某个特定的对象。无论创建多少个对象,静态成员只有一份,所有对象共享同一个静态成员。

1.1 静态成员变量
  • 静态成员变量在整个程序的生命周期中只存在一份,保存在静态内存区。
  • 静态成员变量可以通过类名直接访问,不需要实例化对象。
  • 它在程序开始时分配内存,程序结束时销毁。
示例:
class MyClass {
public:
    static int staticVar;  // 静态成员变量

    void show() {
        std::cout << "Static Variable: " << staticVar << std::endl;
    }
};

// 静态成员变量必须在类外进行定义和初始化
int MyClass::staticVar = 10;

int main() {
    MyClass obj1, obj2;

    // 所有对象共享同一个静态成员变量
    obj1.staticVar = 20;
    obj2.show();  // 输出 20
}

在上面的例子中,staticVar 是一个静态成员变量,所有对象 obj1obj2 都共享同一个变量。

1.2 静态成员函数
  • 静态成员函数可以访问静态成员变量,但不能访问非静态成员变量,因为它不依赖于具体的对象实例。
  • 静态成员函数可以通过类名直接调用,而不需要对象实例。
示例:
class MyClass {
public:
    static void staticFunc() {
        std::cout << "This is a static function." << std::endl;
    }
};

int main() {
    MyClass::staticFunc();  // 不需要对象实例即可调用静态函数
}

2. 动态成员 (Non-static Members)

动态成员(也称为实例成员)是属于类的某个特定对象的成员。每创建一个新对象,就会为该对象的动态成员分配独立的内存,且这些成员之间互不干扰。

2.1 动态成员变量
  • 动态成员变量每个对象都有自己的一份副本,每创建一个对象,就会为该对象的动态成员变量分配独立的内存。
  • 它们只能通过对象实例来访问。
示例:
class MyClass {
public:
    int dynamicVar;  // 动态成员变量

    void show() {
        std::cout << "Dynamic Variable: " << dynamicVar << std::endl;
    }
};

int main() {
    MyClass obj1, obj2;
    
    obj1.dynamicVar = 5;
    obj2.dynamicVar = 10;

    obj1.show();  // 输出 5
    obj2.show();  // 输出 10
}

在这个例子中,dynamicVar 是动态成员变量,每个对象 obj1obj2 都有自己独立的 dynamicVar,互不影响。

2.2 动态成员函数
  • 动态成员函数可以访问类的动态成员变量和静态成员变量。
  • 动态成员函数只能通过对象实例调用,因为它需要知道具体操作哪个对象。
示例:
class MyClass {
public:
    int dynamicVar;

    void dynamicFunc() {
        std::cout << "This is a dynamic function. Variable: " << dynamicVar << std::endl;
    }
};

int main() {
    MyClass obj;
    obj.dynamicVar = 10;
    obj.dynamicFunc();  // 输出 "This is a dynamic function. Variable: 10"
}

3. 区别总结

所属范围类本身每个对象实例
内存分配只分配一次,所有对象共享每个对象分配独立内存
访问方式可以通过类名或对象访问只能通过对象访问
生命周期随程序的运行周期而存在随对象的生命周期而存在
作用域类级别对象级别
访问权限静态函数只能访问静态成员可以访问静态和非静态成员

简言之,静态成员是与类关联的,存在整个程序生命周期中;而动态成员则与对象实例关联,每个对象有独立的动态成员数据和行为。 

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值