C++面向对象编程:对象的内存分配与静态成员

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++面向对象编程:对象的内存分配与静态成员相关的知识,希望对你有一定的参考价值。

      对象是类的实例,而内存分配发生在对象的声明之时,而非类的定义之时,然而每次内存分配并不会总是为每一个对象的成员函数分配内存空间,实际上一旦成为类的定义的一部分,成员函数就会在内存中一次性的建立,因为所有的相同类的对象都使用相同的成员函数,所以并没有必要为每一个对象的成员函数分配内存空间。而对于每一个对象来说其只有数据成员才会获得相应的内存空间。

      如下图所示,略微有点粗糙

        技术分享

 


 静态成员函数以及静态成员数据

   静态成员函数以及静态数据成员的生命周期为自程序运行开始到程序运行结束,也就是说静态成员函数和静态数据成员是在内存中一直存在的,且同一类的所有对象共享该类中所有的静态数据成员

   另,静态函数具有以下特性:

    1.只能调用类中的静态成员函数,以及静态数据成员。

    2.只在类的声明中加上 static 关键字,在具体定义时无需static修饰

        

class test
{
    public:
        static void  Show();
        //类内定义
}
void test::Show()
{
    //具体实现方法
}

   举个例子:

   #include <iostream>
using namespace std;
class item
{
public:
    void add(int i);
    void show();
    static void display();
private:
    static int count ;
    //不能自己赋值,系统将静态变量初始化为0
};
int item::count;
//需在类的定义外声明
//因为静态数据成员是独立存放的,而不是作为对象的一部分
void item::add(int i)
{
    count+=i;
}
void item::show()
{
    cout<<"now the count is:"<<count<<"\n";
}
void item::display()
{
    cout<<"the count is:"<<count<<"\n";
    //静态成员函数只能调用类内其他的静态函数以及静态数据
}

int main()
{
    item a,b,c;
    item::display();
    //无需实例化类即可调用


    a.add(1);
    b.add(1);
    c.add(1);
    a.show();
    b.show();
    c.show();
    item::display();




    return 0;
}

    运行后如下图所示:

    技术分享

以上是关于C++面向对象编程:对象的内存分配与静态成员的主要内容,如果未能解决你的问题,请参考以下文章

C++笔记--面向对象(OOP)编程基础(new/delete类的静态成员c++编译器对象管理模型分析)(3-2)

C++面向对象:静态成员和静态成员函数

C++面向对象-static、const

C++ 访问静态分配对象的成员

面向对象课后深入学习(C++ 类的静态成员详细讲解)

C++静态成员变量在内存中的存储方式