c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量

c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量

本文主要介绍C静态成员变量的相关信息,帮助你更好的理解和学习C,有兴趣的朋友可以了解一下。

定义类时,只声明静态成员,静态成员的定义和初始化应该在类外完成。

C static关键字of可以修改类成员变量/方法,表示变量/方法不从属于特定对象,而是属于类。仔细考虑静态成员变量会发现,它们与C的方式既兼容又矛盾,具有特殊性。

先说兼容的一面。带有声明和定义的C/c语句:声明给出签名,定义给出具体实现。对于一个类型,声明可能不知道它的对象占用的空间,但是可以根据定义明确确定内存占用。之所以说静态成员兼容C模式,是因为它们的初始化模式与方法的定义一致。下面是一个例子:

//Foo.hpp

命名空间tlanyan {

//类声明和定义

Foo类

私人:

//声明静态成员

静态int值;

公共:

//方法声明

void increase value();

int getValue()const;

};

}

//Foo.cpp

命名空间tlanyan {

//定义静态成员变量并初始化它们

int Foo:value=0;

//类方法定义

void Foo:increaseValue() {

价值;

}

int Foo:getValue() {

返回值;

}

}

与兼容点相比,静态成员变量表现出更怪异的一面。以下是个人总结:

静态成员不能在类中初始化;非静态成员可以直接初始化。静态成员只在类中声明,所以不能直接初始化。const补充的静态成员可以直接初始化,但那是const的能力,不是Static的;

静态成员的初始化需要在类外定义时完成;

初始化不受访问修饰符的限制;私有类型的静态成员可以直接访问和赋值;

静态成员可以在初始化的时候调用函数,也可以直接调用自己类的私有函数。

第四点更重要。在不支持C 11的编译器上,要完成静态映射成员,必须借助函数返回:

#包含地图

//类定义

Foo类

私人:

std:mapconst char*,int maps

.

}

//静态成员初始化

std:mapconst char*,int Foo:maps=Foo:init map();

//或者使用全局函数

std:mapconst char*,int Foo:maps=init map();

C 11引入了统一初始化和lambda表达式,初始化的编写更简单:

//统一初始化

std:mapconst char*,int Foo:maps {

{'a ',31},

{'b ',32}

};

//lambda表达式模式

std:mapconst char*,int Foo:maps=[] {

mapconst char*,int _ map

_map.insert(mapconst char*,int:value_type('a ',31));

_map.insert(mapconst char*,int:value_type('a ',32));

return _ map

}();

静态成员的这些异常行为很容易与全局变量联系在一起,它们有很多相似之处:程序启动前完成初始化,程序终止后销毁;存储位置是静态存储区域,而不是堆栈;通过命名空间运算符获取值;通过非函数块中的函数调用或lambda表达式进行初始化…

虽然各种面向对象编程语言都有静态变量,而且使用的比例不低。但是从面向对象的角度来看,静态成员是全局变量的另一种形式,它破坏了隔离和封装,增加了类之间的耦合性,增加了测试的难度。在实践中,应该谨慎使用全局变量,并加强对它们的访问权限。

所以本质上静态成员也是全局变量,只是属于特定类的名字。

以上是对C静态成员变量的详细解释。更多关于C静态成员变量的信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++随机函数rand怎么用,c中rand函数产生的随机数的范围是
  • 留言与评论(共有 条评论)
       
    验证码: