标签:
使用关键字static。初始化静态成员数据必须在类外进行。
它是一个类的对象共享的数据成员,而不仅仅是某一对象的成员数据。例如班级名和班级人数就可以定义为学生类的静态成员数据。
它与一般成员数据的区别在于:对于静态成员数据,该类的每一个对象都共享唯一的数据,即它只存在一份拷贝;而对于一般成员数据,该类的每个对象都独立建立自己一个副本,以保存各自特定的值。
在Student类中定义静态成员数据int Student::count=0;当定义静态成员数据时不能同时进行初始化,如static int count=0是错误的。
它也称为类成员函数。
定义一个静态成员函数printCount(),在该函数中访问静态成员数据count。从类的外边访问公有静态成员数据,有两种形式:
对象名.公有静态成员函数;
类名::公有静态成员函数;
分别对应的代码为
stu.printCount();
Student::printCount();
类的内部的成员函数和成员数据相互访问的关系:
一般成员函数可以访问任何类型的函数和数据,而静态成员函数只可以访问静态成员函数和数据。
静态成员数据提供了在同一个类的所有对象之间共享的机制,而友元则是不同类的成员函数之间、类的成员函数和一般函数之间进行数据共享的机制。友元的引入破坏了类的数据封装性和隐蔽性,因此,在面向对象的程序设计方法中不提倡使用友元机制。
它可以定义在函数级别,也可以定义在函数类级别。
定义友元函数,使用关键字friend。一般函数printStudent()声明为类Student的友元函数,则该函数可以访问类Student的私有成员id,name&age ,方式为printStudent(stu),先声明一个对象Student stu(1,”li”,’F’);
如果一个类的所有成员函数都需要声明为另一个类的友元函数,则友元函数的做法就显得繁琐。一个更为简单的做法就是声明为友元类,即将一个类声明为另一个类的友元函数。例如:
Class Administrator
{....};
Class Student
{
friend class Administrator;
};
例子:
#include<iostream> #include<cstring> using namespace std; class Administrator { public: void createStudent(int pId); } ; class Student{ public: Student(int pId,char* pName,char pSex); ~Student(); friend void printStudent(Student& pStudent); friend void Administrator::createStudent(int pId); private: int id; char* name; char sex; }; void Administrator::createStudent(int pId) { Student stu(1,"wang",'M'); stu.id=pId; // name=new char[strlen(pName)+1]; cout<<"id: "<<stu.id<<","<<"name: "<<stu.name<<","<<"sex: "<<stu.sex<<endl; } Student::Student(int pId,char* pName,char pSex) { cout<<"construct one student."<<endl; id=pId; sex=pSex; name=new char[strlen(pName)+1]; if(name!=0) strcpy(name,pName); } Student::~Student(){ cout<<"deconstuct one student."<<endl; delete[] name; } void printStudent(Student& pStudent) { cout<<"id: "<<pStudent.id<<", "<<"name: "<<pStudent.name<<", "<<"sex: "<<pStudent.sex<<endl; } int main() { Student stu(1,"li",'F'); printStudent(stu); Administrator admin; admin.createStudent(2); return 0; } //一般函数printStudent()声明为类Student的友元函数,则该函数可以访问类Student的私有成员id,name&age
标签:
原文地址:http://blog.csdn.net/l15738519366/article/details/51333332