C++学习(十四)——静态成员

  • 要点:
    1. 静态成员变量和函数,相当于该类全局变量和函数
    2. 静态成员函数中不能包含非静态变量和函数。
    3. 静态成员,实际上不放在成员内部,而是放在所有成员的外面,被所有对象共享。即静态成员只与该类相关,与其他变量和成员基本上没有关系。
    4. 静态成员不需要通过对象就能访问。
    5. 静态成员函数不具体作用到某一具体对象上。

基本概念

1、静态成员

        (1)在说明前面加了static关键字的成员。如下:

class CRectangle{
	private:
		int w,h;
		//静态成员变量 
		static int nTotalArea; 
		static int nTotalNumber;
	public:
		CRectangle(int w_,int h_);
		~CRectangle();
		//静态成员函数
		static void PrintTotal(); 
}; 

        (2)sizeof不会计算静态成员变量。

        (3)普通成员函数必须作用到类生成的某一具体对象上,而静态成员函数不具体作用到某一具体对象上。

2、访问静态成员

        (1)类名::成员名

CRectangle::PrintTotal();

        (2)对象名.成员名

CRectangle r;
r.PrintTotal();

        (3)指针->成员名

CRectangle *p = &r;
p->PrintTotal();

        (4)引用.成员名 

CRectangle& rr = r;
int n = rr.nTotalArea;

3、注意要点

 

 

 若对象是用复制构造函数生成的,而我们自己并没有写复制构造函数,可能造成程序结果出问题,因此最好还是自己编写复制构造函数。

#include <iostream>
using namespace std;

class CRectangle{
	private:
		int w,h;
		//静态成员变量 
		static int nTotalArea; 
		static int nTotalNumber;
	public:
		static int nTotalTest;
		CRectangle(int w_,int h_);
		//拷贝构造函数 
		CRectangle(CRectangle& r);
		~CRectangle();
		//静态成员函数
		static void PrintTotal(); 
}; 
CRectangle::CRectangle(int w_,int h_){
	w = w_;
	h = h_;
	nTotalNumber ++;
	nTotalArea += w+h;
}
//加一个拷贝构造函数,否则若对象是用复制构造函数生成的,而我们自己并没有写复制构造函数,
//可能造成程序结果出问题,因此最好还是自己编写复制构造函数。 
CRectangle::CRectangle(CRectangle& r){
	w = r.w;
	h = r.h;
	nTotalNumber ++;
	nTotalArea += w+h;
}

CRectangle::~CRectangle(){
	nTotalNumber --;
	nTotalArea -= w+h;
}
void CRectangle::PrintTotal(){
	cout<<nTotalNumber<<","<<nTotalArea<<endl;
}
//没有定义下面则编译不通过 
int CRectangle::nTotalNumber = 0;
int CRectangle::nTotalArea = 0;
int CRectangle::nTotalTest = 1;

int main(){
	CRectangle r1(3,3),r2(2,2);
	CRectangle::PrintTotal();
	//cout<<CRectangle::nTotalNumber<<endl; //上面定义nTotalNumber是私有的 
	cout<<CRectangle::nTotalTest<<endl;//公有的则可以访问 
	r1.PrintTotal();
	return 0;
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值