您的位置:首页 > 其它

静态成员函数和静态成员变量

2016-08-07 11:30 239 查看

静态成员变量

参考链接:

[]http://www.cnblogs.com/ayanamistltz/archive/2012/11/22/2783033.html]

[]http://blog.csdn.net/morewindows/article/details/6721430]

概念:

静态成员 属于整个类,在内存中只有一份空间,位于全局区(静态区)中,所以可以在所有对象中共享它。(使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。)

静态成员变量 是类作用域的静态变量

静态:程序开始时为其分配内存空间,程序结束时才释放

类的作用域:在类内部可以直接被调用,在类外部可以通过作用域操作符 class name:: 或对象object.*object->调用。

静态成员函数

概念

类的成员函数(包括静态/非静态)和一般函数一样,都存放在代码区,所有对象共享一个副本

非静态成员函数有一个隐藏参数this*指针,用以标明其属于的对象

静态成员函数不属于某个对象,而是属于整个类,因此没有 this 指针

和静态成员变量一样,在类内部可以被直接调用,在类外部可以通过作用域操作符 class name::或对象object. *object-> 调用

特点

静态成员函数中不能直接调用非静态成员变量。因为非静态成员变量只有在对象创建时才分配内存静态成员函数不需要类的实例就可以调用,即通过 class name::调用

但可以通过形参传递进来的具体对象来调用非静态成员变量

静态成员函数不能被声明为virtual

类与对象

功能上

@GeneralJing:类就好像制造汽车的蓝图,对象是是刹车的脚闸,而成员函数是构成脚闸的内部构造,通过类屏蔽了这成员函数内部的代码,当需要刹车时,只需要通过制定的对象调用成员函数,完成刹车!

内存上

@徐仁强:类是抽象的,系统不为其分配存储空间;而对象是实际存在并占有相应的存储空间!

成员函数是在类内定义的;

使用上

不能通过类名来调用类的非静态成员函数。

class Point
{
public:
void init()
{
}
static void output()
{
}
};
void main()
{
Point::init();
Point::output();
}
//编译出错:error C2352: 'Point::init' : illegal call of non-static member function


类的对象可以使用静态成员函数和非静态成员函数。

void main()
{
Point pt;
pt.init();
pt.output();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  静态成员函数