클래스 중 정적 구성원과 우원
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.