🎯第一题:
设计一个复数类Complex,包含成员变量实部real和虚部imag;运算符重载+/-实现两个复数加、减的功能。在主函数里创建两个复数对象,分别求两个复数的和与差,在主函数里显示运算结果。效果如图:
🎯 第二题:
现有一学生类定义:
class Student{
……..
private:
int _id;
string _name;
char *_addr;
};
实现学生类的赋值运算符=重载,主函数调用赋值运算符并输出对象信息。
🎯 第三题:
编写一个程序,声明一个2行2列矩阵类Matrix,重载运算符“+”,使之能用于矩阵的加法运算。重载流插入运算符“<<”和流提取运算符“>>”,使之能用于该矩阵的输入与输出。从键盘输入两个矩阵a和b,求两个矩阵之和并输出。效果如图:
🎯 答案:
💻第一题:
#include <iostream> using namespace std; class Complex { private: double real; double imag; public: Complex(double x=0,double y=0):real(x),imag(y) {} void show() const; //输出数据 friend Complex operator+(const Complex& a1, const Complex& a2) ; //重载为类的友元函数 friend Complex operator-(const Complex& a1, const Complex& a2);//重载为类的友元函数 }; /******************************************************************/ void Complex::show() const { if(imag>=0) cout<<real<<"+"<<imag<<"i"<<endl; else cout<<real<<imag<<"i"<<endl; } Complex operator+(const Complex& a1,const Complex& a2) { return Complex(a1.real+a2.real,a1.imag+a2.imag); } Complex operator-(const Complex& a1,const Complex& a2) { return Complex(a1.real-a2.real,a1.imag-a2.imag); } /******************************************************************/ int main() { Complex c1(5.1,3.4); Complex c2(3.6,5.3); Complex c; cout<<"c1:"; c1.show(); cout<<"c2:"; c2.show(); c=c1+c2; cout<< "c1+c2:"; c.show(); c=c1-c2; cout<<"c1-c2:"; c.show(); return 0; }
💻第二题:
#include <iostream> #include <cstring> using namespace std; class Student { private: int _id; string _name; char *_addr; public: Student(int id,string name,const char *addr); Student(); Student& operator=(Student& stu); void show(); }; Student::Student() {} Student::Student(int id,string name,const char *addr) { /******************************************/ _id=id; _name=name; this->_addr=new char[strlen(addr)+1]; if(_addr) strcpy(_addr,addr); /******************************************/ } Student& Student::operator=(Student& stu) { //注意深拷贝 /******************************************/ _id=stu._id; _name=stu._name; _addr=new char[strlen(stu._addr)+1]; if(_addr) strcpy(_addr,stu._addr); return *this; /******************************************/ } void Student::show() { cout<<"学号:"<<_id<<endl; cout<<"姓名:"<<_name<<endl; cout<<"住址:"<<_addr<<endl; } int main() { Student stu2,stu1(10001,"zhangsan","luoyang"); stu1.show(); stu2=stu1; stu2.show(); return 0; }
💻第三题:
#include <iostream> #include <iomanip> using namespace std; class Matrix { private: int a[2][2]; friend istream& operator>>(istream& is,Matrix& _m); friend ostream& operator<<(ostream& os,Matrix& _m); friend Matrix operator+(const Matrix& mat1,const Matrix& mat2); }; ostream& operator<<(ostream& os,Matrix& _m) { //每个数4列 setw(4) for(int i=0; i<2; i++) { for(int j=0; j<2; j++) os<<setw(4)<<_m.a[i][j]; os<<endl; } return os; } /****************************************************/ istream& operator>>(istream& is,Matrix& _m) { for(int i=0; i<2; i++) for(int j=0; j<2; j++) is>>_m.a[i][j]; return is; } Matrix operator+(const Matrix& mat1,const Matrix& mat2) { Matrix mat; for(int i=0; i<2; i++) for(int j=0; j<2; j++) { mat.a[i][j]=mat1.a[i][j]+mat2.a[i][j]; } return mat; } /****************************************************/ int main() { Matrix m1,m2,m; cout<<"input matrix m1:"<<endl; cin>>m1; cout<<"input matrix m2:"<<endl; cin>>m2; m=m1+m2; cout<<"output matrix m:"<<endl; cout<<m; return 0; }