C++学习笔记-const和static

const

1、使用const来定义常量

const int num = 10; //应该在声明时进行初始化,否则该常量的值是不确定的,而且无法修改

2、const与指针

指向常量的指针(const修饰的是指针指向的内容)

//指向常量的指针
double rates[5] = {88.9, 100.12, 59.2, 111.1, 23.2};
const double *pd = rates;
cout << pd[2] << "\n";
pd[2] = 67.99;	//error
cout << pd[2];

pd为指向常量的指针,

不能使用pd来修改它指向的数值,但可以让pd指向其他的地址。通常把指向常量的指针用作函数参量。

指针常量(const 修饰指针)

//指针常量
double rates[5] = {88.9, 100.12, 59.2, 111.1, 23.2};
cout << pd[2] << "\n";
double * const pd2 = rates;
pd2[2] = 67.99;	//ok
cout << pd[2];

pd2的值不可改变,只能指向最初赋给它的地址,但pd2可以用来改变它所指向的数据值。

<<effective C++>>上有个好记的方法:const在*号左边修饰的是指针所指的内容;const在*号右边修饰的是指针。
简单记就是:左内容,右指针。
也可以这样理解:先忽略类型名,然后看const离哪个近,就修饰谁。
如:const [int] *p; //先去掉int,这时const 修饰*p, p是指针,*p是指针指向的对象,不可变。

3、const与引用

double value = 100;

const double & v = value;

不能修改const引用所指向的内容

4、const与类成员

class StaticAndConstTest
{
public:
	StaticAndConstTest(int _num = 100);
	~StaticAndConstTest(void);
	//类的const 成员常量 必须在构造方法中使用初始化列表来初始化
	const int num;
};

StaticAndConstTest::StaticAndConstTest(int _num)
	: num(_num)
{
}

 const成员函数

class StaticAndConstTest
{
public:
	StaticAndConstTest(int _num = 100);
	~StaticAndConstTest(void);
	//const成员函数
	void show() const;
	//类的const 成员 必须在构造方法中使用初始化列表来初始化
	const int num;
};

void StaticAndConstTest::show() const
{
	std::cout << num;
}

const成员函数不能修改调用对象,只要类方法不修改调用对象,就应将其声明为const。

时间: 2024-11-14 00:35:10

C++学习笔记-const和static的相关文章

java学习笔记之面向对象static,final关键字

java学习笔记之面向对象static,final关键字 一.static关键字 1.概述: static静态的,被static修饰的成员属于类,不属于单个对象,被所有对象所共享,存在静态区中,静态的成员优先于对象加载到内存中. 2.statc修饰成员的使用方式:(被static修饰的成员变量有默认值) /* 1.可以通过对象直接使用,不推荐使用 2.通过类名调用静态成员 类名.静态成员变量 类名.静态成员方法 */ 3.static的特点 /* 1.在同一个类中,静态成员只能访问静态成员,非静

java学习笔记四:static的几个角落及小谈多态

最近有点事情,没有及时更新笔记,学习不可弃,总结一下最近的学习,其中重点是static的一些应用,多态是一种设计理念,了解较容易,想如火纯清的确不是一件容易的事情. 对于static,主要有两点是我所学习的. 1.首先简单的介绍一下static的定义.static是静态的意思,就是说这个类变量或者类方法不需要实例化就可以使用.使用static的变量是类变量,也成为静态域(static field).这些是static的基本语义,了解了这些,继续向下看. java核心技术(卷一)对于静态有这样一段

C语言学习笔记--const 和 volatile关键字

1.const关键字 (1)const 修饰的变量是只读的,它不是真正的常量,本质还是变量,只是告诉编译器不能出现在赋值号左边! (2)const 修饰的局部变量在栈上分配空间 (3)const 修饰的全局变量在全局数据区分配空间(vc.gcc 会将其放入常量区,bcc 放入全局数据区) (4) const 只在编译期有用,在运行期无用 #include <stdio.h> const int g_cc = 2;//bcc 下存储在全局数据区,可修改. //vc.gcc 将其存储在常量区,不可

[javase学习笔记]-7.12 static关键字的使用场景

这一节我们来看一下在我们开发的过程中,在什么时候我们要用到static关键字进行静态修饰. 我们这里所说的静态,无非就是两种,一种是静态变量,一种是静态函数,我们分这两种情况进行说明static关键字的使用场合. 一.静态变量 我们在7.8节中对static关键字特点和7.9节中成员变量与静态变量区别进行学习的时候就已经很明确的指出了静态变量是共享数据,而对象中封装的特有数据. 因此我们可以这样解释:当分析对象中所具备成员变量的值是相同的,且不需要对象做修改,这时这个成员变量就可以被static

C++学习笔记 &lt;const限定词&gt;

1.cons可以限定一个变量,是的它的值不能被改变 2.默认情况下,const对象仅在文件内有效. 编译器在编译时,会把程序中所有用到const变量的地方替换成const的初始值,因此每个用到const变量的文件中都要有const变量的定义,为了支持这一用法,同时避免同一变量的多次定义,const对象被设定为仅在文件内有效,当多个文件中出现了同名的const对象时,等同于分别在每个文件中定义了独立的变量.如果要在不同的文件中使用同一个const变量,不管是const的声明还说定义都要在const

Java学习笔记四:static关键字

1.static表示什么? static表示"全局"或者"静态"的意思.在Java中没有全局变量的概念,static 可以简单的理解为全局的,独立的一个功能. (1)当我们在使用 static 修饰成员变量或者成员方法的时候,通常会在Java内存中为这些变量或者方法指定了一块独立的区域(这块区域可能在栈中,也有可能在堆中). (2)如果静态的变量或方法在不出其作用域的情况下,其 引用句柄是不会发生改变的. (3)这块区域是内存共享的,它的引用都指向同一个位置,就是说

C++ Primer 学习笔记_24_类与数据抽象(10)--static 与单例模式、auto_ptr与单例模式、const成员函数、const 对象、mutable修饰符

C++ Primer 学习笔记_24_类与数据抽象(10)--static 与单例模式.auto_ptr与单例模式.const成员函数.const 对象.mutable修饰符 前言 [例]写出面向对象的五个基本原则? 解答:单一职责原则,开放封闭原则,依赖倒置原则,接口隔离原则和里氏替换原则 里氏替换原则:子类型必须能够替换他们的基类型. 设计模式分为三种类型:创建型模式.结构型模式和行为型模式 一.static 与单例模式 1.单例模式 单例模式的意图:保证一个类仅有一个实例,并提供一个访问它

C++ Primer 学习笔记_25_类与数据抽象(11)--const 用法小结、static与const以及static const(const static)

一.const 用法总结 1.可以对const 的用法做个小总结: const int n = 100;  //定义常量 const Test t(10); const int & ref = n;   //const引用 int& ref = n;  //Error [const与指针] const int* p; //const出现在*前面,表示*p是常量 (*p = 200; //Error) int * const p2;  //const出现在*后面,表示p2是常量 (p2 =

C++ Primer 学习笔记_53_类与数据抽象 --友元、static成员

类 --友元.static成员 一.友元 友元机制允许一个类将对其非公有成员的访问权授予指定的函数或类(对未被授权的函数或类,则阻止其访问):友元的声明以关键字friend开始,但是它只能出现在类定义的内部.友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受其声明出现部分的访问控制影响. [最佳实践] 通常,将友元声明成组的放在类定义的开始或结尾是个好主意! 1.友元关系:一个例子 假设一个窗口管理类Window_Mgr可能需要访问由其管理的Screen对象的内部