首页 > 其他分享 >类内const与static修饰符总结

类内const与static修饰符总结

时间:2023-01-21 16:00:16浏览次数:34  
标签:const 函数 静态 成员 修饰符 对象 static

const用处

常数据成员
const修饰类的成员变量,表示成员常量,不能被修改,同时它只能在初始化列表中赋值(c11中支持类中实始化)。可被const 和非const 成员函数调用,而不可以修改。

class A
{
public:
A():iValue(199){}
private:
const int iValue;  }  

常成员函数
const 修饰函数的意义
承诺在本函数内部不会修改类内的数据成员,不会调用其它非const成员函数
const 修饰函数位置
const 修饰函数放在,声明这后,实现体之前,大概也没有别的地方可以放了。

1,如果const 构成函数重载,const 对象只能调用const函数,非const对象优先调
用非const函数。
2,const 函数只能调用const函数。非const 函数可以调用const 函数。
3,类体外定义的const成员函数,在定义和声明处都需要const修饰符

 

 常对象
const A a;
a.dis();
小结:
1,const对象,只能调用const成员函数
2,可访问const 或非const 数据成员,不能修改。   static用处 在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏(相比全局变量的优点)的原则,保证了安全性还可以节省内存。类的静态成员,属于类,也属于对象,但终归属于类。
  声明:
static 数据类型 成员变量; //在类的内部
初始化
数据类型 类名::静态数据成员 = 初值; //在类的外部
调用
类名::静态数据成员
类对象.静态数据成员   1,static 成员变量实现了同簇类对象间信息共享。
2,static成员类外存储,求类大小,并不包含在内。
3,static 成员是命名空间属于类的全局变量,存储在data区rw段。
4,static 成员使用时必须初始化,且只能类外初始化,可以在函数中再次赋值。
5,可以通过类名访问(无对象生成时亦可),也可以通过对象访问。   类静态成员函数的定义
为了管理静态成员,c++提供了静态函数,以对外提供接口。并静态函数只能访问静态成员。
 声明
static 函数声明
调用
类名::函数调用
类对象.函数调用  静态成员函数的意义,不在于信息共享,数据沟通,而在于管理静态数据成员,完成对静态数据成员的封装。
静态成员函数只能访问静态数据成员。原因:非静态成员函数,在调用时this指针时被当作参数传进。而静态成员函数属于类,而不属于对象,没有this指针
  static const 成员
如果一个类的成员,既要实现共享,又要实现不可改变,那就用static const修饰。
修饰成员函数,格式并无二异,修饰数据成员。必须要类内部实始化 class A
{
public:
static const void dis()
{
cout<<i<<endl;
}
private:
const static int i = 100;
};  

标签:const,函数,静态,成员,修饰符,对象,static
From: https://www.cnblogs.com/uestc-du/p/17063860.html

相关文章

  • mt_Day5:static与继承
    static静态关键字1.static成员变量static+成员变量:该变量在内存中只存储一份,可以被共享访问、修改。静态成员变量的访问publicclassUser{/***例子:......
  • 1451, 'Cannot delete or update a parent row: a foreign key constraint fails
    问题描述:1451,'Cannotdeleteorupdateaparentrow:aforeignkeyconstraintfails(`sysProDB4`.`IM003D1`,CONSTRAINT`IM003D1_item_no_id_d6a0fc9e_fk_IM003H_i......
  • 关于 const
    const限定符在编译器中限制变量,设定该变量不可被改变,但实际上系统里还是将由const修饰的值识别为一个变量(只是在编译器中进行限制)注意:由const修饰的变量必须在定义......
  • 【优秀论文解读】UV-SLAM: Unconstrained Line-based SLAM Using Vanishing Points fo
    论文简介提出了一种UV-SLAM的算法,整体建立与VINS-MONO的基础上:在VINS—MONO的基础上增加了线特征的约束和消影点的约束。其中线特征的提取用的是linesegmentdetector......
  • Angular component 没有constructor如何调用service
    Addthiscodein app.module.tsimport{Injector,NgModule}from'@angular/core';exportletAppInjector:Injector;exportclassAppModule{constru......
  • Constructor注入(具有相关对象)示例
    在此示例中,我们使用 map 作为具有Answer和User的答案。在这里,我们将键和值对都用作对象。答案具有自己的信息,例如answerId,答案和postedDate,用户具有自己的信息,例如userId......
  • Constructor注入和Map示例
    Constructor注入和Map示例在此示例中,我们使用 map 作为具有已发布用户名答案的答案。在这里,我们将键和值对都用作字符串。像前面的示例一样,它是论坛的示例,其中 一个问......
  • Constructor注入以及示例
    我们可以在Spring框架中通过构造函数注入集合值。 constructor-arg 元素内可以使用三个元素。可以是:ListSetMap每个集合可以具有基于字符串和基于非字符串的值。在......
  • java static 静态变量
    目录视频链接javastaticstatic基础static修饰方法的应用场景工具类工具类实例javastatic应用注意事项null视频链接静态变量:https://www.bilibili.com/video/BV17F411T......
  • 【ES6】 let与const详解
    【ES6】let与const详解ES6,全称为ECMAScript6。ES6与js的关系是:前者是后者的规格,后者是前者的实现。换句话说,ES是js的国际化版本,js是ES的子集。1.letlet命令和var命令是差......