2017-12-25 7 views
-1

개체를 double 값으로 변환하고 싶습니다. 그것은 다음과 같습니다 -> ClassA clsA(1,2,3);C++ operator = 개체에서 double로 캐스트

double result = clsA; 

내 헤더 파일에 같은 STH를 썼다 :

const double operator= (const ClassA&); 

그리고 CPP 파일에 구현 :

const double ClassA::operator= (const ClassA& a) { 
    /* here I made some math calculation on instance 'a' and the result is double value *\ 
    return doubleValue; 
} 

그러나 그것은하지 않습니다 작업, 나는 그것도 좋은 생각인지 모르겠다. 나는 operator =를 사용하여 하나의 객체를 다른 예제에 할당한다. -> objA = objB, 그래서 나는 tog를 주장 할 수 있는지 모른다. 에테르.

도움 주셔서 감사합니다. 당신이 명시 적 캐스트가 (두 배로 두 배로 실수로 암시 적 캐스트의 위험을 줄일 수 있도록 발신자를 강제하려면

// integer division/multiplication 
// computes (num_*fac_)/div_ 
struct A 
{ 
    int num_, fac_, div_; 
    A (int num, int fac, int div) : num_(num), fac_(fac), div_(div) {}; 

    // convert to double 
    operator double() const { return double(num_ * fac_)/double(div_); } 
}; 

int main() 
{ 
    A a(1, 2, 3); 
    volatile double f = a; 
    return f; 
} 

것은 만들 : 운영자

+0

'를 ClassA :: 연산자 = (const를 클래스를 사용 &)'는 (const-reference)'ClassA'를'ClassA'에 할당하기 위해 사용됩니다. 반환 유형은'ClassA '여야합니다. 'ClassA a, b; a = b;'. 당신이 원하는 것은 변환 연산자가 두 배가되기 때문에'ClassA '안에'operator double() const;'와 같은 것입니다. 예 : http://en.cppreference.com/w/cpp/language/cast_operator. – Holt

+0

@Holt 의견을 작성 하시겠습니까? 어떻게 시작해야할지 모르겠다. – lory

+0

@Holt 그리고 '='다음에 오는 객체를 취하는 것을 '알리는'방법과 double value = objA에 대입하는 값; ? – lory

답변

1

당신은 변환 (또는 캐스트)을 작성하려면 운영자 명시 적.

explicit operator double() const { return double(num_ * fac_)/double(div_); 

캐스트를 강제하려면, static_cast

double f = static_cast<double>(a); 
+0

작동하지만 왜 두 개의 objecta가 할당 된 경우 -> objA = objB, 오류가 발생합니다 : '*'과부하 연산자 사용이 불분명합니다 (피연산자 유형 'ClassA'및 'int') obj3 = obj1 * 2; 내장 후보 연산자 * (double, int) – lory

+0

'objA = objB'는 수레와 아무 관련이 없습니다. 아무 것도 정의하지 말고 수동으로 관리되는 리소스가 없으면 컴파일러가 제공하는 기본 복사 생성자와 연산자를 사용하십시오. –

+0

연산자에 명시 적으로 추가하면 오류가 발생합니다 : 명시 적 대화 함수는 C++ 11 확장입니다 – lory