C++ const 和 static 成员

const数据成员

  • 定义一个常量,企图修改这个值会导致编译错误,必须在定义时初始化。
  • 不允许将const 地址赋值给非const 指针。
  • const 指针指向const 对象时,本身地址不能变,但是指向的地址可以变化。
  • const 指针指向非const 对象时,指向的地址不能变,但是指向对象的值可以变。
int main()
{
	int const a = 1,b = 2;
	int c = 3;
	int const *p = &a, *q = &c; //*p = 1;*q = 3;
	p = &b; c = 4;  // *p = 2; *q = 4;
	return 0;
}

const 成员函数

  • 一个类的对象也可以用const 限定为常量。
  • 只有声明为const 的成员函数才可以被const 对象调用。
  • 声明const 成员函数的形式:
    返回类型 \quad 成员函数名(参数表) const;
  • 定义const 成员函数形式:
    返回类型 \quad 成员函数名(参数表) const { 函数体 }
  • const 成员函数不能修改类的数据成员,也不能调用其他非const 成员函数。
  • 其他成员函数可以调用const 成员函数。
  • const 成员函数隐含的this 指针是const X*
class X {
	int m;
public:
	X(int v = 0):m(v){}
	void set(int v){ m = v; }
	int get() const { return m; }
};
int main()
{
	const X b(5);
	cout<<b.get()<<endl;
	return 0;
}

static 数据成员

  • 类的静态数据成员在整个类中只有一份,被这个类的所有对象所共同访问。从逻辑上讲,静态成员属于类,非静态成员属于对象。
  • 静态数据成员没有进入程序的全局作用域只是在类的作用域中。
  • 静态数据成员存放于静态存储区,由类所有对象共享,生命周期不依赖于对象。
  • 由于static 数据成员不是某个特定对象的,因而不能在构造函数中初始化,应该在类定义之外初始化。初始化时要使用类名限定,但是不用出现static关键字。
  • 静态数据成员的访问
    • 成员访问运算符“ . ”或“ -> ”,通过对象或指针访问。
    • 直接用类名字限定的静态成员名字访问。
#include <iostream>
using namespace std;
class X{
	static int count;
	int m;
public:
	X(int mm = 0){ count++; m = mm;}
	X(const X& a){ count++; m = a.m;}
	~X() { count--;}
	int getCount(){ return count;}
};
int X::count = 0; 
int main()
{
	X a(5),b;
	X c = a;
	cout<<"a.count="<<a.getCount()<<" b.count="<<b.getCount()<<endl;
	X d = b;
	cout<<"count变为"<<a.getCount()<<endl;
	return 0;
}

在这里插入图片描述

static 成员函数

  • 如果成员函数只访问静态数据成员,那么用哪个对象调用这个函数都没有关系。这样的函数成员可以声明为静态成员函数。
  • 静态成员函数的声明在类定义中,加static 关键字,在类外定义静态成员函数时不需要static 关键字。
  • 静态成员函数可以用成员访问,也可以直接用类名限定函数名调用。
  • 静态成员函数没有默认this 指针,所以不能访问非静态成员,也不能调用非静态成员函数。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值