>类库下载 >其它类库 >C++ 클래스 템플릿의 Friend 선언 및 템플릿 생성자

C++ 클래스 템플릿의 Friend 선언 및 템플릿 생성자

高洛峰
高洛峰원래의
2016-10-12 15:52:481673검색

클래스 템플릿의 친구 선언:

특정 템플릿의 모든 인스턴스에 대한 액세스 권한을 부여할 때 클래스 템플릿이나 함수 템플릿의 선언이 범위에 존재할 필요는 없습니다. 우정 관계를 특정 인스턴스화로 제한하려면 클래스나 함수를 친구 선언에 사용하기 전에 선언해야 합니다.

template <class T>
class test
{
    template <class U> friend ostream& operator<< (ostream &os, const test<U> &obj); //友元的所有实例均具有访问权
    ...
};

class test;
template <class Type> ostream& operator<< (ostream &os, const test<Type> &obj);
template <class T>
class test
{
    friend ostream& operator<< <T> (ostream &os, const test<T> &obj);//友元为的T类型实例才有访问权
    ...
};

템플릿 생성자:

템플릿 클래스에서는 생성자와 템플릿 생성자가 동시에 존재할 경우 생성자가 먼저 호출됩니다. 템플릿 생성자는 해당 인터페이스가 정확히 충족되는 경우에만 호출됩니다. 컴파일러는 템플릿 생성자를 생성자로 처리하지 않으며 클라이언트가 복사 생성자를 정의하지 않더라도 컴파일러는 기본 복사 생성자를 생성합니다.

template <class T>
class test
{
public:
    test() { cout << "in my test construct" << endl;}
    test(const test &) { cout << "in my test copy" << endl;}
    template <class V>
    test(const test<V> &) { cout << "in my template copy" << endl;}
};


int main()
{
    test<int> t1;
    test<int> t2(t1);
    test<double> t3(t1);
    return 0;
}

여기서 템플릿 test(const test &) 함수는 테스트 유형을 테스트로 변환할 수 있는 유형 변환 생성자라고 해야 합니다. 즉, 다양한 템플릿 매개변수를 가진 템플릿 클래스입니다. 예를 들어 이 애플리케이션에서는 double 배열 유형의 매개변수에 전달하려는 int 유형의 배열이 있는 경우 이 생성자가 변환을 완료할 수 있습니다.

프로그램의 출력 구조는 다음과 같습니다.

내 테스트 구성

내 테스트 사본

내 템플릿 사본

stl의 쌍 및 auto_ptr 클래스 애플리케이션


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

관련 기사

더보기