클래스 중 정적 구성원과 우원

3065 단어

8.11 정적 구성원


키워드 static을 사용합니다.정적 구성원 데이터 초기화는 클래스 밖에서 해야 합니다.

8.11.1 정적 구성원 데이터


그것은 하나의 유형의 대상이 공유하는 데이터 구성원이지 특정한 대상의 구성원 데이터가 아니다.예를 들어 학급 이름과 학급 인원수는 학생류의 정적 구성원 데이터로 정의할 수 있다.
일반 구성원 데이터와 다른 점은 정적 구성원 데이터에 대해 이 유형의 모든 대상은 유일한 데이터를 공유한다. 즉, 복사본이 하나만 존재한다는 것이다.일반 구성원 데이터에 대해 이 클래스의 모든 대상은 독립적으로 자신의 사본을 만들어 각자의 특정한 값을 저장한다.
Student 클래스에서 정적 구성원 데이터 int Student 정의::count=0;정적 구성원 데이터를 정의할 때 static int count=0과 같이 초기화할 수 없습니다.

8.11.2 정적 구성원 함수


그것도 클래스 구성원 함수라고도 부른다.
정적 구성원 함수 printCount () 를 정의합니다. 이 함수에서 정적 구성원 데이터count에 접근합니다.클래스의 외부에서 공유 정적 구성원 데이터에 접근하는 것은 두 가지 형식이 있다.
개체 이름.공유 정적 구성원 함수;
클래스 이름: 공유 정적 구성원 함수;
각각 대응하는 코드는
stu.printCount();
Student::printCount();
클래스의 내부 구성원 함수와 구성원 데이터가 서로 접근하는 관계:
일반 구성원 함수는 모든 종류의 함수와 데이터에 접근할 수 있지만 정적 구성원 함수는 정적 구성원 함수와 데이터에만 접근할 수 있다.

8.12우원


정적 구성원 데이터는 같은 클래스의 모든 대상 간에 공유하는 메커니즘을 제공하고 유원은 서로 다른 클래스의 구성원 함수, 클래스의 구성원 함수와 일반 함수 간에 데이터를 공유하는 메커니즘이다.유원의 도입은 유형의 데이터 봉인성과 은폐성을 파괴했기 때문에 대상을 대상으로 하는 프로그램 설계 방법에서 유원 메커니즘을 사용하는 것을 제창하지 않는다.
그것은 함수 등급에 정의할 수도 있고, 함수 클래스에 정의할 수도 있다.

8.12.1 유원 함수


키워드friend를 사용하여 요소 함수를 정의합니다.일반 함수 printStudent()가 클래스 Student의 유원 함수로 성명하면 이 함수는 클래스 Student의 개인 구성원 id,name &age에 접근할 수 있으며 printStudent(stu)로 대상을 먼저 성명할 수 있다.

8.12.2 우원류


만약 하나의 클래스의 모든 구성원 함수가 다른 클래스의 유원 함수로 성명해야 한다면, 유원 함수의 방법은 번거로워 보일 것이다.한 가지 더 간단한 방법은 바로 유원류로 성명하고, 곧 한 종류가 다른 종류의 유원 함수로 성명될 것이다.예를 들면 다음과 같습니다.
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 

좋은 웹페이지 즐겨찾기