cpp-클래스-분석 함수
7027 단어 cpp
개술
분석 함수 특징:
보조류
class CAnimal
{
public:
CAnimal() : mGroup(0)
{
cout << "CAnimal()" << endl;
}
CAnimal(int group) : mGroup(group)
{
cout << "CAnimal(" << group << ")" << endl;
}
CAnimal(const CAnimal &other) : mGroup(other.mGroup)
{
cout << "CAnimal(const CAnimal &other)" << endl;
}
~CAnimal()
{
cout << "~CAnimal()" << endl;
}
private:
int mGroup;
};
class CDog : public CAnimal
{
public:
CDog() : mLoyal(10)
{
cout << "CDog()" << endl;
}
CDog(int loyal) : CAnimal(1), mLoyal(loyal)
{
cout << "CDog(" << loyal << ")" << endl;
}
CDog(const CDog &other) : CAnimal(other), mLoyal(other.mLoyal)
{
cout << "CDog(const CDog &other)" << endl;
}
~CDog()
{
cout << "~CDog()" << endl;
}
private:
int mLoyal;
};
class CCat : public CAnimal
{
public:
CCat() : mCute(20)
{
cout << "CCat()" << endl;
}
CCat(int cute) : CAnimal(2), mCute(cute)
{
cout << "CCat(" << cute << ")" << endl;
}
CCat(const CCat &other) : CAnimal(other), mCute(other.mCute)
{
cout << "CCat(const CCat &other)" << endl;
}
~CCat()
{
cout << "~CCat()" << endl;
}
private:
int mCute;
};
class CPig : public CAnimal
{
public:
CPig() : mWeight(30)
{
cout << "CPig()" << endl;
}
CPig(int weight) : CAnimal(3), mWeight(weight)
{
cout << "CPig(" << weight << ")" << endl;
}
CPig(const CPig &other) : CAnimal(other), mWeight(other.mWeight)
{
cout << "CPig(const CPig &other)" << endl;
}
~CPig()
{
cout << "~CPig()" << endl;
}
private:
int mWeight;
};
class CDonkey : public CAnimal
{
public:
CDonkey() : mStrength(40)
{
cout << "CDonkey()" << endl;
}
CDonkey(int strength) : CAnimal(4), mStrength(strength)
{
cout << "CDonkey(" << strength << ")" << endl;
}
CDonkey(const CDonkey &other) : CAnimal(other), mStrength(other.mStrength)
{
cout << "CDonkey(const CDonkey &other)" << endl;
}
~CDonkey()
{
cout << "~CDonkey()" << endl;
}
private:
int mStrength;
};
class CHorse : public CAnimal
{
public:
CHorse() : mSpeed(50)
{
cout << "CHorse()" << endl;
}
CHorse(int speed) : CAnimal(5), mSpeed(speed)
{
cout << "CHorse(" << speed << ")" << endl;
}
CHorse(const CHorse &other) : CAnimal(other), mSpeed(other.mSpeed)
{
cout << "CHorse(const CHorse &other)" << endl;
}
~CHorse()
{
cout << "~CHorse()" << endl;
}
private:
int mSpeed;
};
class CFarmLand
{
public:
CFarmLand() : mArea(5000)
{
cout << "CFarmLand()" << endl;
}
CFarmLand(int area) : mArea(area)
{
cout << "CFarmLand(" << area << ")" << endl;
}
CFarmLand(const CFarmLand &other) : mArea(other.mArea)
{
cout << "CFarmLand(const CFarmLand &other)" << endl;
}
~CFarmLand()
{
cout << "~CFarmLand()" << endl;
}
private:
int mArea;
};
class CFarm : public CFarmLand
{
public:
CFarm() : mCapacity(1000)
{
cout << "CFarm()" << endl;
}
CFarm(int capacity) : mCapacity(capacity), mDog(20), mCat(30), mPig(40), CFarmLand(8000)
{
cout << "CFarm(" << capacity << ")" << endl;
}
CFarm(const CFarm &other) : mCapacity(other.mCapacity), mDog(other.mDog), mCat(other.mCat), mPig(other.mPig), CFarmLand(other)
{
cout << "CFarm(const CFarm &other)" << endl;
}
~CFarm()
{
cout << "~CFarm()" << endl;
}
private:
int mCapacity;
private:
CPig mPig;
CDog mDog;
CCat mCat;
};
분석 순서
void destruct()
{
cout << "-----construct-----" << endl;
CFarm farm;
cout << "-----destruct-----" << endl;
}
output:
-----construct-----
CFarmLand()
CAnimal()
CPig()
CAnimal()
CDog()
CAnimal()
CCat()
CFarm()
-----destruct-----
~CFarm()
~CCat()
~CAnimal()
~CDog()
~CAnimal()
~CPig()
~CAnimal()
~CFarmLand()
결론:
합성 분석 함수
만약에 현식 정의 분석 함수가 없다면 컴파일러는 분석 함수를 합성할 것이다. 일단 현식 정의 분석 함수(실현되지 않았더라도)가 있으면 컴파일러는 분석 함수를 합성하지 않는다. 컴파일러는 개발자가 분석 대상을 어떻게 분석하는지 알고 컴파일러의 도움을 필요로 하지 않는다고 생각한다.
합성 분석 함수 함수체는 비어 있고 다른 것은 현식 정의의 분석 함수와 다를 것이 없으며, 순서대로 클래스 유형 구성원 분석 함수와 부류 분석 함수를 호출한다
class CAdvanceFarm : public CFarm
{
private:
CHorse mHorse;
CDonkey mDonkey;
};
CAdvanceFarm에는 명시적으로 정의된 분석 함수가 없으며 컴파일러가 분석 함수를 작성합니다. 작성 분석 함수는 다음과 같습니다.
~CAdvanceFarm() {}
void destruct()
{
cout << "-----construct-----" << endl;
CAdvanceFarm farm;
cout << "-----destruct-----" << endl;
}
output:
-----construct-----
CFarmLand()
CAnimal()
CPig()
CAnimal()
CDog()
CAnimal()
CCat()
CFarm()
CAnimal()
CHorse()
CAnimal()
CDonkey()
-----destruct-----
~CDonkey()
~CAnimal()
~CHorse()
~CAnimal()
~CFarm()
~CCat()
~CAnimal()
~CDog()
~CAnimal()
~CPig()
~CAnimal()
~CFarmLand()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MinGW-W64용 Windows에서 복잡한(실제로는 아님) Boost 컴파일.C++를 사용하는 경우 매우 유용한 수많은 라이브러리를 생성하는 커뮤니티 기반 프로그램인 Boost를 우연히 발견했을 것입니다. 그 중 일부는 C++17부터 포함된 파일 시스템 라이브러리와 같이 C++에 추가되었습니...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.