2016-10-14 2 views
-2

클래스의 멤버 함수가 다른 클래스의 반환 유형을 가질 수 있습니까?클래스의 멤버 함수

class A 
{ 
    int a,b; 
public: 
    B func(int x); // func returns type B which is another class 
}; 

class B 
{ 
}; 

허용 되나요?

+1

왜 사용하지 않으시겠습니까? (하지만 그렇습니다. 허용됩니다) – UnholySheep

+0

클래스를 잊어 버리면 typename도 반환 할 수 있습니다. :) –

+0

@SauravSahu : 응? –

답변

0

예, 컴파일러가 func에 대한 선언 전에 B을 알고있는 한. class B {};의 정의를 class A 위로 옮기거나 Bclass A 앞에 class B;으로 작성하여 전달하십시오.

1

예, 유효한 유형을 반환 할 수 있으며 해당 유형이 허용하는 경우 멤버 함수가 반환 할 수있는 기능에 대한 추가 제한 사항이 없으며 일반 기능과 비교할 수있는 추가 제한이 없습니다. 그것은 아직 정의되지 않는 코드 예제 func()에서

비록 형식 B의 객체를 반환 할 수 없습니다. 앞으로 선언에 대한

class B; 

class A { 
public: 
    B func(int x); // declared 
    B func2() { return B{}; } // this would not compile with forward declaration of B 
}; 

class B { 
}; 

// this definition must see class B defined, not forward declared 
B A::func(int x) 
{ 
    return B{}; 
} 

추가 세부 사항 : 만 class B 정의 뒤에 그것을 당신이 A::funcclass A 전에 class B 정의를 이동하거나 선언을 앞으로 사용 만 (정의되지 않음) 선언해야합니다, 그리고 당신은 정의 (구현) 할 수 있습니다 을 찾을 수 있습니다 here

0

예, 클래스를 순서대로 넣을 수 있습니다. 현재 예제가 작동하지 않습니다. 그것은이다 :

class B 
{ 
}; 
class A 
{ 
    int a,b; 
public: 
    B func(int x); // func returns type B which is another class 
}; 

또는 앞으로 선언 :

class A 
{ 
    int a,b; 
public: 
    B func(int x); // func returns type B which is another class 
}; 

class B 
{ 
}; 

당신 중 하나는이처럼 전에 클래스 B를 둘 필요가

class B; //Forward Declaration. 
class A 
{ 
    int a,b; 
public: 
    B func(int x); // func returns type B which is another class 
}; 

class B 
{ 
}; 

그렇지 않으면, 여러분의 코드가 작동합니다.

관련 문제