[英]overloading operator * c++
我一直在嘗試編譯該程序,但是它給我一個函數重載*運算符的錯誤: 復雜運算符*(double n)const
當我嘗試編譯時,出現錯誤: '2 * c'中的'operator *'不匹配
這是頭文件:
復雜度
#ifndef COMPLEX0_H
#define COMPLEX0_H
class complex {
double realNum;
double imagNum;
public:
complex();
complex(double x,double y);
complex operator *(double n)const;
complex operator *(const complex &c1)const;
friend std::istream &operator>>(std::istream &is,complex &cm);
friend std::ostream &operator<<(std::ostream &os,const complex &cm);
};
#endif
這是cpp:
Complex.cpp
#include "iostream"
#include "complex0.h"
complex::complex() {
imagNum = 0.0;
realNum = 0.0;
}
complex::complex(double x, double y) {
realNum = x;
imagNum = y;
}
complex complex::operator *(const complex& c1) const{
complex sum;
sum.realNum=realNum*c1.realNum-c1.imagNum*imagNum;
sum.imagNum=realNum*c1.imagNum+imagNum*c1.realNum;
return sum;
}
complex complex::operator *(double n)const{
complex sum;
sum.realNum=realNum*n;
sum.imagNum=imagNum*n;
return sum;
}
std::istream &operator >>(std::istream& is, complex& cm) {
is >> cm.realNum>> cm.imagNum;
return is;
}
std::ostream &operator <<(std::ostream& os, const complex& cm){
os<<"("<<cm.realNum<<","<<cm.imagNum<<"i)"<<"\n";
return os;
}
main.cpp
#include <iostream>
using namespace std;
#include "complex0.h"
int main() {
complex a(3.0, 4.0);
complex c;
cout << "Enter a complex number (q to quit):\n";
while (cin >> c) {
cout << "c is " << c << "\n";
cout << "a is " << a << "\n";
cout << "a * c" << a * c << "\n";
cout << "2 * c" << 2 * c << "\n";
cout << "Enter a complex number (q to quit):\n";
}
cout << "Done!\n";
return 0;
}
有人可以向我解釋我做錯了什么嗎?
成員函數運算符僅在第一個操作數為您的類類型時適用。 如果要處理第二個操作數屬於您的類型的情況,則還需要一個自由函數(在該函數中,由於操作的可交換性,我們簡單地委派給成員函數):
complex operator*(double n, complex const & x)
{
return x * n;
}
(請注意,標准庫已經包含<complex>
。)
您具有如下定義的成員函數:
complex complex::operator *(double n) const;
這樣您就可以執行以下操作: complex_number * 3.0
,而不是3.0 * complex_number
。 但是,您不能創建一個可以讓您執行3.0 * complex_number
的成員函數。 您只能在double
的定義內創建該成員函數,您不能更改它。
但是,您也可以將其作為獨立的函數來代替將其作為成員函數來進行:
complex operator*(complex x, double n); // Called for complex_number * 2.0
complex operator*(double n, complex x); // Called for 2.0 * complex_number
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.