Vì mục đích giáo dục, tôi đang sửa lớp C++ số mẫu của riêng mình. Tôi muốn để có thể viết (v, w) cho dấu chấm sản phẩm của hai vectơ và do quá tải operator,()
như sau:C++: Mặc định khởi tạo một kiểu tích phân trong một hàm mẫu
template<class T>
const T Vector<T>::operator,(const Vector<T>& v) const
{
assertEqualSize(v);
T t;
for(size_t i=0; i<numElements; i++) {
t += elements[i] * v[i];
}
return t;
}
Câu hỏi của tôi bây giờ là: làm thế nào để đúng cách khởi tạo t
với giá trị hợp lý (ví dụ như 0.0
cho Vector<double>
)? Tôi đã thử T t();
nhưng sau đó g ++ cho tôi biết, ví dụ: "double (*)()" không thể chuyển đổi thành "const double" tại câu lệnh return và rằng operator+=()
sẽ không được xác định cho "(double(), double)".
Cảm ơn bạn rất nhiều!
sử dụng '(v, w)' cho sản phẩm chấm là khá kỳ quặc. Tại sao không chỉ đơn giản là quá tải '*', tức là 'v * w' cho sản phẩm chấm? (đó là những gì tôi sử dụng). Trong 3D, sản phẩm vector có thể được thực hiện bằng cách sử dụng '^'. Tất nhiên, phép nhân bằng vô hướng hoặc ma trận cũng có thể được thực hiện bằng cách sử dụng (một quá tải khác) '*'. – Walter
Tôi đồng ý rằng việc sử dụng lại toán tử dấu phẩy không phải là một ý tưởng hay. Nó sẽ dẫn đến mã khó hiểu. Thật không may, việc sử dụng lại '*' cũng không phải là một ý tưởng hay, bởi vì nó không rõ ràng, sản phẩm chéo là một ứng viên rõ ràng. Tôi thường cung cấp các chức năng cho các phép toán nhị phân liên quan đến vectơ. – juanchopanza