Tôi đang cố gắng xây dựng một lớp num templated. Lớp này cần phải có một thuộc tính công khai val
, với kiểu T
, là tham số templated duy nhất. Hơn nữa, nếu người ta cung cấp một giá trị, thuộc tính ( val
) sẽ được khởi tạo với giá trị này. Để làm như vậy tôi đã thực hiện mã sau đây:
#include <iostream>
template<class T>
class Num {
public:
T val;
Num():val(0) { std::cout<<"default constr used"<<std::endl; }
Num(T value):val(value) {std::cout<<"constr (T value) used"<<std::endl; }
~Num() { std::cout<<"destructor used"<<std::endl; }
template<typename U>
Num operator+(const Num<U>& other) {
return val+other.value;
}
};
Hơn nữa, tôi đã tạo main()
chức năng để kiểm tra chương trình, trông như thế này:
int main() {
std::cout << Num<int>(1) + Num<double>(2.0);
return 0;
}
Tuy nhiên, kết quả của chương trình là bây giờ 3
. Trong khi đó tôi mong đợi nó là 3.0
(loại double
).
value
.
Num<int>(1) + Num<double>(2.0);
giống như cáchNum<int>(1).operator+(Num<double>(2.0))
bạn đã khai báo là trả về giá trị của loạiNum<int>
.