바와 같이 이미 언급 된 이니셜 라이저 목록을 지원하지 않는 경우, 가장 직접적인 번역은 struct
와 파스칼 record
을 교체하는 것입니다. 그러므로 가장 직접적인 번역 될 것이라고 byte
의 C++ 상응하는 unsigned char
것을 참고 :
struct complex
{
double re, im;
};
void NumberMultiplication(complex a, complex& b, unsigned char k)
{
b.re = a.re*k;
b.im = a.im * k;
}
그러나, 이것은 최선의 번역이 아닙니다. 언급 할 첫 번째 것은 파스칼과 달리 C++은 구조화 된 유형을 반환 할 수 있다는 것입니다. (나는 이것을 허용하는 파스칼 방언이 있다고 생각합니다). 따라서 당신은 complex
반환 함수에 NumberMultiplication
을 변경할 수 있습니다
complex NumberMultiplication(complex a, unsigned char k)
{
complex b { a.re*k, a.im * k };
return b;
}
참고 위의 코드에서, 나는 지역 변수 정의를 직접 C++ struct
를 초기화 할 수있는 가능성을 사용한 적이있다.당신은 complex
에게 생성자를 제공함으로써 더 나은 할 수 그러나 : 생성자 (double imag
)의 두 번째 인수는 기본 인자 (= 0
)가 있는지
struct complex
{
double re, im;
complex(double real, double imag = 0); // constructor declaration
};
// inline is a hint for the compiler to optimize by inserting that code
// into calling code
inline complex::complex(double real, double imag):
re(real),
im(imag) // these initialize the members
{
// here you could write other code to be executed on initialization
// (not needed in this case)
}
complex NumberMultiplication(complex a, unsigned char k)
{
return complex(a.re * k, a.im * k);
}
참고; 이것은 허수 부를 생략 할 수있게한다; 또한 생성자가 하나의 인수만으로 호출 될 수 있으므로 (explicit
으로 표시되지 않음) 암시 적 변환을 두 번으로 수행 할 수 있습니다. 즉, 이제 예를 들어 다음과 같이 작성할 수 있습니다. 우리가 일반적으로 곱셈을 사용하는 것이 작업을위한 멋진 함수 이름을 발명 할 필요가 없습니다 :
complex z = NumberMultiplication(3.0, 7);
이이
complex z = NumberMultiplication(complex(3.0, 0.0), 7);
다음 개선으로 같은 의미는 C++의 연산자 오버로딩을 사용하는 것입니다 운영자 *
; 우리는 단순히 특수 기능 이름 operator*
을 사용하여 우리 자신의 유형에 대한 곱셈 연산자를 정의 할 수 있습니다 : 당신은 지금 단순히 전자를 작성할 수와
complex operator*(complex a, unsigned char k)
{
return complex(a.re * k, a.im * k);
}
합니다. 지.
complex x(1,2), y;
unsigned char c = 42;
y = x*c;
도, 물론 당신은 또한 때때로 대신 y=c*x
를 작성 할 수 있습니다 작업에 있다고합니다. 그냥
complex operator*(unsigned char k, complex a)
{
return complex(a.re * k, a.im * k);
}
을 추가하고 컴파일러가 타입에서 호출 할 수있는 올바른 기능을 선택합니다 : 다행히 당신은 함수 오버로드 덕분에 있다고 할 수 있습니다.
다음으로 멤버 변수를 숨김으로써 구조체를 올바른 클래스로 만들 수 있습니다. 우리는 실제 및 가상 부분을 읽는 접근 자 함수를 제공합니다. 이제 우리는 다음을 얻습니다 :
이제 복소수는 곱셈보다 훨씬 더 많은 연산이 필요합니다. 다행히도 누군가가 이미 그 일을했기 때문에 자신을 구원 할 수 있습니다. C++에서 복소수의 완전한 구현을 포함하는 complex
헤더가 존재합니다. 따라서 당신은
#include <complex>
을 쓸 수와 파스칼 코드가 자기 정의 complex
유형을 사용하는 곳 어디에서나 유형 std::complex<double>
를 사용합니다.
C++을 배우는 것은 어떻습니까? – Mithrandir