静态成员

作者: 平凡的鱼仔 | 来源:发表于2018-09-16 15:45 被阅读15次

静态成员分为:

1.静态数据成员
2.静态成员函数

静态成员的特点:

1.不管创建了多少个对象,它都只有一个副本,这个副本由所有属于这个类的对象共享。
2.静态成员解决了不同对象间的数据和函数共享问题,不属于任何一个对象,它的作用域是类范围。
3.静态成员在每个类对象中并不占存储空间,只是在类中分配存储空间,供所有对象使用。每个对象都可以对该类的静态数据成员的值进行更新。
4.静态数据成员具有静态生存期,必须对它进行初始化。在vs2012环境下,发现这点有问题,在类外定义但不初始化可以通过编译。
5.公有的静态数据成员可以直接访问,但私有(private)、保护(protected)的必须通过公有接口进行访问。

静态数据成员初始化的注意事项:

1.类中的声明只是静态数据成员的引用性声明,应在类体外定义并初始化,静态成员初始化与它的控制权限无关
2.初始化时不加static,避免和一般静态变量或对象混淆。
3.由于静态数据成员是类的成员,因此在初始化时必须使用作用域运算符(::)限定它所属的类。
4.公有的静态数据成员可以直接访问,但私有的或保护的静态数据成员要通过公有的接口进行访问,一般将这个公有的接口定义为静态成员函数。

所有的变量其实在使用前都要定义,当然,静态成员变量在其中。

静态成员函数

静态成员函数属于整个类,不属于类中的任意一个对象。
静态成员函数既可以在类体内声明,也可以在类体外声明,在类体外声明时不需要加static前缀。静态成员函数在类中只有一个副本,它可以直接访问类中的静态成员,不能直接访问非静态成员;若要访问,必须通过参数传递的方式来获得相应的对象,再通过对象进行访问。
假如Display()是一个类中的静态成员函数,Point为类名,一般采用Point::Dispaly()的方式调用,而不是用对象.Display()。前者强调了Display()属于某一个类,而不是属于某一个对象。静态成员在类的任何对象建立之前就已经存在了。静态成员在程序内部不依赖于任何对象被访问,即就算没有创建对象,也可以通过类名访问类的公有静态成员。

上述静态成员特点4的详解

静态成员的初始化有些小问题,在类外定义了之后其实成员就被分配了内存,不初始化也不报错。

#include "stdafx.h"
#include <iostream>
using namespace std;

class Student
{
public:
    static int a;
};
int Student::a;  //类外定义,不进行初始化,静态成员不能定义为局部变量
int _tmain(int argc, _TCHAR* argv[])
{
    cout<<Student::a<<endl;  //不报错,这里输出为0,即默认值是0
    getchar();
    return 0;
}
#include "stdafx.h"
#include <iostream>
using namespace std;

struct rectangle
{
    int width;
    int length;
};
class Polygon
{
public:
    static rectangle rec;
};

rectangle Polygon::rec; //这种情形不知道怎么初始化,只能进行类外定义

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

ps:静态、非静态成员函数都可以访问静态数据成员。

相关文章

  • 06.静态的注意事项

    静态的注意事项 A:静态成员只能直接访问静态成员 B:非静态成员既可以访问非静态成员也可以访问静态成员

  • C++——静态成员函数与静态成员变量

    静态成员函数与静态成员变量使用static进行定义。 静态成员函数和静态成员变量其实就是全局函数与全局变量。 静态...

  • C++——静态成员函数与静态成员变量

    静态成员函数与静态成员变量使用static进行定义。 静态成员函数和静态成员变量其实就是全局函数与全局变量。 静态...

  • TypeScript 03——成员方法定义与调用

    类中的成员分为: 静态成员 和 实例成员;静态成员包含了:静态属性 和 静态方法;实例成员包含了:实例属性 和 实...

  • 内部类

    静态内部类 静态内部类只能调用静态成员变量,不能调用非静态成员变量; 成员内部类 成员内部类和成员变量类似; 局部...

  • static静态成员变量、成员函数的作用

      数据成员可以分为静态变量、非静态变量两种。  静态成员:静态类中的成员加入static修饰符,即是静态成员,可...

  • C++第六弹---静态成员与友元

    静态成员 静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即<类名>::<静态成员名>。 ...

  • 18-static成员

    静态成员(static) 静态成员:被static修饰的成员变量/函数,可以称为静态成员。 可以通过对象(对象.静...

  • 类型转换、static成员、单例模式

    静态成员(static) 静态成员:被static修饰的成员变量\函数可以通过对象(对象.静态成员)、对象指针(对...

  • c++之静态成员

    静态成员:被static修饰的成员变量\函数 可以通过对象(对象.静态成员)、对象指针(对象指针->静态成员)、 ...

网友评论

    本文标题:静态成员

    本文链接:https://www.haomeiwen.com/subject/vbqfnftx.html