类中静态成员函数的使用

访问静态数据成员,一般来说,先创建一个对象,对象捆绑一个成员函数,去操作静态数据成员。

难道对象不存在时就不能观察静态数据成员了吗?

因此,与数据成员一样,将静态成员做成私有的,用静态成员函数去访问静态数据成员是合适的。





//---------main.cpp------------
#include <iostream>
#include <string>

using namespace std;

class Student
{
private:
	static int number;
	string name;
public:
	void set(string str)
	{
		name = str;
		number++;
	}
	static void printNumber(){std::cout<<"number is :"<<number<<endl;}
	void print() {std::cout<<"name :" << name <<"  number is :"<<number<<endl;}
};
int Student::number = 0;    //静态数据成员在类外分配空间和初始化,定义静态成员的格式不能重复使用static,必须加类名和域操作将其初始化
void fn()
{
	Student s1;
	s1.set("A");
	
	Student s2;
	s2.set("B");
	
	s1.printNumber();

}
int main(int argc,char **argv)
{
	Student s;
	s.set("C");

	fn();

	s.print();

	Student::printNumber();  //不用创建一个多余的对象来达到访问静态成员的目的
	return 0;
}

A is :3
name :C  number is :3
number is :3
请按任意键继续. . .

    静态成员函数不受对象的牵制,可以用对象名调用静态成员函数,也可以用类名加上域操作调用静态成员函数,这时候,也将它看做是某个名空间的一个函数。


静态成员函数如果不在类中实现,而在类的外部实现时,类名前应该免去static关键字。成员函数的静态性只有在类中声明才是必要的。

因为静态成员函数可以不捆绑对象的形式调用,静态成员函数被调用时,没有当前对象的信息,所以静态成员函数不能访问数据成员。

如:

static void  printNumber(){std::cout<<name<<number<<endl;}

则编译通不过。并不是说它没有访问私有数据的权限。

如:

static void printNumber(Student &s)

{

std::cout<<"the name is : "<<s.name<<"  total number is :   "<<s.number<<endl;

}




<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值