copy control 복제 제어
2861 단어 copy
복제 구조 함수, 부수 조작부호와 분석 함수를 총칭하여 복제 제어(copy control)라고 한다.
컴파일러는 자동으로 이러한 조작을 실현하지만, 클래스도 자신의 버전을 정의할 수 있다.
복제 구조 함수:
직접 초기화와 복제 초기화.
string null_book = "9-99-99999-9";//copy-initialization
string dots(10,'.'); //direct-initializaton
string empty_copy=string(); //copy-initialization
string empty_direct; //direct-initialization
합성된 복제 구조 함수
만약 우리가 복제 구조 함수를 정의하지 않았다면, 컴파일러는 우리에게 하나를 합성해 줄 것이다.합성의 기본 구조 함수와 달리 우리가 다른 구조 함수를 정의하더라도 복제 구조 함수를 합성할 수 있다.복제구조 함수(synthesized copy constructor)를 합성하는 행위는 구성원별로 초기화(memberwise initialize)를 실행하고 새 대상을 원래 대상의 복사본으로 초기화하는 것이다.
이른바 '구성원 하나하나' 는 컴파일러가 기존 대상의 모든 비static 구성원을 순서대로 만들고 있는 대상으로 복사하는 것을 가리킨다.단 하나의 예외가 있는데, 각 구성원의 유형이 그 구성원을 복제하는 의미를 결정한다.
합성 복제 구조 함수는 내장 형식 구성원의 값을 직접 복제합니다.
클래스 형식 구성원은 이 클래스의 복제 구조 함수를 사용하여 복제합니다.
그룹 구성원의 복제는 예외입니다. 일반적으로 그룹을 복제할 수 없지만, 클래스가 그룹 구성원을 가지고 있다면, 합성 복제 함수는 그룹을 복제합니다.그룹을 복제할 때 복제 구조 함수를 합성하면 그룹의 모든 요소를 복제합니다.
Sales_item :: Sales_item(const Sales_item &rhs):
isbm( rhs.isbn ), //calls string copy constructor
units_sold ( rhs.units_sold), //copy rhs.units_sold
revenue (rhs.revenue)
{ }
복제를 금지합니다. 클래스는 복제 구조 함수가private라는 것을 명시해야 합니다.
합성 할당 조작부호(synthesized assignment operator)는 합성 복제 구조 함수와 유사하다.그것은 구성원마다 값을 부여할 것이다.
e.g. Sales_item의 작성 대입 연산자는 다음과 같습니다.
//equivalent to the synthesized assignment operator
Sales_item & Sales_item::operator = (const Sales_item & rhs){
isbm = rhs.isbn;//calls string::operator =
units_sold = rhs.units_sold; //use built-in int assignment
revenue =rhs.revenue;
return *this;
}
demo:
#include <iostream>
#include <string>
using namespace std;
class my_class{
public:
int a;
string s;
char ch[10];
void to_s(){
cout<<"a address:"<<&a<<",a val:"<< a<<","<<endl
<<"s address:"<<&s<<",s val:"<<s<<"," <<endl
<<"ch address:"<<&ch<<",ch val:"<<ch<<endl;
}
};
int main()
{
my_class obj;
obj.a=10;
obj.s="danniswu ";
obj.ch={'h','e','l','\0'};
obj.to_s();
my_class obj2(obj);
obj2.to_s();
return 0;
}
만약 클래스가 분석 함수를 필요로 한다면, 그것도 부수 조작부호와 복제 구조 함수를 필요로 한다. 이것은 유용한 경험 법칙이다.이 규칙은 흔히 삼법칙(rule of three)이라고 하는데, 분석 함수가 필요하면 이 세 개의 복제 제어 구성원이 필요하다는 것을 말한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
파일 내용 및 파일 경로의 단수 및 복수 대체 텍스트를 사용하여 원본 파일을 대상에 붙여넣기기본 코드로 많은 수의 파일과 폴더를 복사하고 파일 내부의 여러 줄과 파일 및 폴더의 이름을 바꿔야 하는 경우가 많으며 시간이 많이 걸립니다😢. 이 문제를 해결하기 위해 나를 위해 할 수 있는 유틸리티를 작성했습니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.