码迷,mamicode.com
首页 > 编程语言 > 详细

浅谈C++类中的static

时间:2019-09-23 10:09:44      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:end   生成   volatil   cpp   oid   浅谈   void   div   code   

静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问,而静态成员函数可不建立对象就可以被使用。
或者说静态函数与一般函数没有太大的区别,只是访问有限制,静态变量跟一般的全局变量的区别就是访问有限制。

static变量

static变量不像普通的变量,static变量独立于一切类对象处在。static修饰的变量先于对象存在,所以static修饰的变量要在类外初始化。因为static是所有对象共享的东西嘛,必须要比对象先存在的。

class test
{
private:
public:
    static int i;
};
int test::i = 100;//此句包含了声明和赋值,初始化不受private和protected访问限制,但是若是priivate,下面main函数就无法访问
int main()
{
    cout << test::i << endl;
    return 0;
}

 

好处:用static修饰的成员变量在对象中是不占内存的,因为他不是跟对象一起在堆或者栈中生成,用static修饰的变量在静态存储区生成的,所以用static修饰一方面的好处是可以节省对象的内存空间。所以一般类const变量一般改为static const变量,可以节省一些空间。

C++ 类 的static 非const变量如何避免多重定义

header.h

#ifndef HEADER_H_
#define HEADER_H_
class test{
public:
  static bool b;
};
#endif

 

cpp1.cpp

#include "header.h"
void f1()
{
  if(test::b)
    std::cout << "cpp1" << std::endl;
}

 

cpp2.cpp

#include "header.h"
void f2()
{
  if(test::b)
    std::cout << "cpp2" << std::endl;
}

 

main.cpp

void f1();
void f2();
int main()
{
  f1();
  f2();
  return 0;
}

 

我的解决方案

header.h

#ifndef HEADER_H_
#define HEADER_H_
class test{
public:
  static bool b;
};
#endif

 

header.cpp

#include "header.h"
bool test::b = false;

 

cpp1.cpp

#include "header.h"
void f1()
{
  if(test::b)
    std::cout << "cpp1" << std::endl;
}

 

cpp2.cpp

#include "header.h"
void f2()
{
  if(test::b)
    std::cout << "cpp2" << std::endl;
}

 

main.cpp

void f1();
void f2();
int main()
{
  f1();
  f2();
  return 0;
}

 

注:如果既是const又是static,直接在header.h里面赋予初始值即可,无需header.cpp

static成员函数

static函数也是类函数,所以在写定义时也要写明属于哪个类。与不同类函数不同的是,它没有传入this指针,正因为没有this指针,所以static类成员函数不能访问非static的类成员,只能访问 static修饰的类成员。静态成员函数不可以同时声明为 virtual、const、volatile函数。

class test
{
public:
    static int i;//此处只是声明变量
    static void f();//声明
};
int test::i;//此处是定义,少了此处会链接错误
void test::f()//定义
{
    i = 1000;
    cout << i << endl;
}
int main()
{
    //test a;
    test::f();
    return 0;
}

 

 

 
 

浅谈C++类中的static

标签:end   生成   volatil   cpp   oid   浅谈   void   div   code   

原文地址:https://www.cnblogs.com/lonelyprince7/p/11570312.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!