2016-09-14 1 views
0

두 개의 간단한 클래스가 있습니다. integer과 변수가 하나만있는 int이고 realdouble입니다.C++ : 양면 클래스 변환

integer a=2016; int b=a;

real a=20.16; double b=a;

이 완벽하게 작동하도록 이미 끝났어요. 지금은과 같이, 그들 사이의 변환을 할 필요가 :

integer foo; real bar; foo=bar; bar=foo;

또는 적어도 유사한 구문을. 나는 double을 int로 변환 할 때 데이터가 손실 될 것이라는 것을 안다. 나는 그것을 처리 할 것이다. 그러면 내가 어떻게 할 수 있니? 무엇을 어디에서 #include해야하고 메소드/연산자가 작성하는 데 과부하가 필요합니까? 내 프로젝트는 파일 main.cpp, integer.h, integer.cpp, real.h, real.cpp으로 나뉩니다. 감사. 당신은 기본적으로 문제에 대한 두 가지 솔루션을

//integer.h 
class integer 
{ 
    private: 
     int a; 
    public: 
     integer(); 
     integer(int number); 
     operator int() const; 
}; 
//integer.cpp 
#include "integer.h" 

integer::integer(){ 
    a=0; 
} 
integer::integer(int number){ 
    a=number; 
} 
integer::operator int() const{ 
    return a; 
} 
//real.h 
class real { 
    private: 
     double a; 
    public: 
     real(); 
     real(double number); 
     operator double() const; 
}; 
//real.cpp 
#include "real.h" 

real::real(){ 
    a=0; 
} 
real::real(double number){ 
    a=number; 
} 
real::operator double() const{ 
    return a; 
} 
+1

http://en.cppreference.com/w/cpp/language/cast_operator – Danh

+0

좋은 답변을 얻으려면이 클래스의 최소 버전을 표시해야합니다. –

+0

@erip이 경우 상속을받지 못합니다.이 경우 [원 - 타원 문제] (https://en.wikipedia.org/wiki/Circle-ellipse_problem)가 있습니까? –

답변

2

:

편집 : 같은 클래스는 보이는

첫 번째는 integer 객체에 real 개체를 변환 할 수 있습니다 conversion operators, 그 반대를 작성하는 것입니다 그 반대.

다른 해결책은 사용자 지정 생성자와 할당 연산자를 구현하여 다른 클래스를 가져 오는 것입니다.

+0

"설명"의 첫 번째 예제 에서처럼 "중첩 된 이름 지정자에서 불완전한 유형이 사용되었습니다"와 같은 작업을 시도했습니다. 두 번째 변형을 수행하는 방법? – 1valdis

+0

@ 1valdis 변환 연산자 함수 *** 선언 *** 만 클래스에 넣습니다. 그런 다음 *** 클래스를 모두 정의한 후 *** 함수를 정의합니다 (즉 구현). –

+0

.cpp에 정의 된 헤더에 함수를 선언했습니다. 그 밖에 내가 어디에서해야합니까? – 1valdis