c++面向对象程序设计第四章课后习题

时间:2023-03-10 00:34:33
c++面向对象程序设计第四章课后习题

这是书上的习题,我使用的是VS2010运行编译的

原习题:

4.有两个矩阵a和b,均为两行三列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加。如c=a+b。

#include<iostream>
using namespace std;
class Matrix{
public:
Matrix();
friend Matrix operator+(Matrix &a,Matrix &b);
void input();
void display();
private:
int mat[][];
};
//定义构造函数
Matrix::Matrix(){
for (int i=;i<;i++){
for (int j=;j<;j++){
mat[i][j]=;
}
}
}
//定义重载运算符“+”函数
Matrix operator+(Matrix &a,Matrix &b){
Matrix c;
for (int i=;i<;i++){
for (int j=;j<;j++){
c.mat[i][j]=a.mat[i][j]+b.mat[i][j];
}
}
return c;
}
void Matrix::input(){
cout<<"input value of matrix:"<<endl;
for (int i=;i<;i++){
for (int j=;j<;j++){
cin>>mat[i][j];
}
}
}
void Matrix::display(){
for (int i=;i<;i++){
for (int j=;j<;j++){
cout<<mat[i][j]<<" ";
}
cout<<endl;
}
} int main(){
Matrix a,b,c;
a.input();
b.input();
cout<<endl<<"Matrix a:"<<endl;
a.display();
cout<<endl<<"Matrix b:"<<endl;
b.display();
c=a+b;
cout<<endl<<"Matrix c=Matrix a + Matrix b:"<<endl;
c.display();
system("pause");
return ; }

运行结果:

c++面向对象程序设计第四章课后习题

这个运行时是要自己输入一串数字进去的

c++面向对象程序设计第四章课后习题

改进版:有两个矩阵a和b,均为三行三列。求两个矩阵的和,差和乘积,。重载运算符“+”,”-“,”*“,使之能用于矩阵相加,相减,相乘。如c1=a+b,才=a-b,c3=a*b。

解析:这个其实跟上面的差不多,最主要的区别在矩阵的乘法上,他们不是直接将+改成乘号就好了,矩阵的乘法运算如下

c++面向对象程序设计第四章课后习题

c++面向对象程序设计第四章课后习题

#include<iostream>
using namespace std;
class Matrix{
public:
Matrix();
  //重载友元函数
friend Matrix operator+(Matrix &a,Matrix &b);
friend Matrix operator-(Matrix &a,Matrix &b);
friend Matrix operator*(Matrix &a,Matrix &b);
void input();
void display();
private:
int mat[][];
};
//定义构造函数
Matrix::Matrix(){
for (int i=;i<;i++){
for (int j=;j<;j++){
mat[i][j]=;
}
}
}
//定义重载运算符“+”函数
Matrix operator+(Matrix &a,Matrix &b){
Matrix c;
for (int i=;i<;i++){
for (int j=;j<;j++){
c.mat[i][j]=a.mat[i][j]+b.mat[i][j];
}
}
return c; }
//定义重载运算符“-”函数
Matrix operator-(Matrix &a,Matrix &b){
Matrix c;
for (int i=;i<;i++){
for (int j=;j<;j++){
c.mat[i][j]=a.mat[i][j]-b.mat[i][j];
}
}
return c;
}
//定义重载运算符“*”函数
Matrix operator*(Matrix &a,Matrix &b){
Matrix c;
for (int i=;i<;i++){
for (int j=;j<;j++){
for (int k=;k<;k++){
c.mat[i][j]=c.mat[i][j]+a.mat[i][k]*b.mat[k][j];
} }
}
return c;
} void Matrix::input(){
cout<<"input value of matrix:"<<endl;
for (int i=;i<;i++){
for (int j=;j<;j++){
cin>>mat[i][j];
}
}
}
void Matrix::display(){
for (int i=;i<;i++){
for (int j=;j<;j++){ cout<<mat[i][j]<<" ";
}
cout<<endl;
}
} int main(){
Matrix a,b,c1,c2,c3;
a.input();
b.input();
cout<<endl<<"Matrix a:"<<endl;
a.display();
cout<<endl<<"Matrix b:"<<endl;
b.display();
c1=a+b;
cout<<endl<<"Matrix c1=Matrix a + Matrix b:"<<endl;
c1.display();
c2=a-b;
cout<<endl<<"Matrix c2=Matrix a - Matrix b:"<<endl;
c2.display();
c3=a*b;
cout<<endl<<"Matrix c3=Matrix a * Matrix b:"<<endl;
c3.display();
//system("pause");
return ; }

运行结果:

c++面向对象程序设计第四章课后习题

6.请编写程序,处理一个复数与一个double数相加的运算,结果存放在double型的变量中dl中,输出dl的值,再以复数形式输出此值。定义Complex(复数)类,在成员函数中包含重载类型转换运算符:

operator double(){return real;}

代码:

#include<iostream>
using namespace std;
class Complex{
public:
Complex(){
real=;imag=;
}
Complex(double r){
real=r;imag=;
}
Complex(double r,double i){
real=r;imag=i;
}
operator double(){
return real;
} void display();
private:
double real;
double imag;
}; void Complex::display(){
cout<<"("<<real<<","<<imag<<")"<<endl;
}
int main(){
Complex c1(,),c2;
double dl;
dl=2.5+c1;
cout <<"dl="<<dl<<endl;
c2=Complex(dl);
cout<<"c2=";
c2.display();
system("pause");
return ;
}

运行结果:

c++面向对象程序设计第四章课后习题