这是书上的习题,我使用的是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 ; }

运行结果:

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

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

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

#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 ; }

运行结果:

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++面向对象程序设计第四章课后习题的更多相关文章

  1. C程序设计(第四版)课后习题完整版 谭浩强编著

    //复习过程中,纯手打,持续更新,觉得好就点个赞吧. 第一章:程序设计和C语言 习题 1.什么是程序?什么是程序设计? 答:程序就是一组计算机能识别和执行的指令.程序设计是指从确定任务到得到结果,写出 ...

  2. Perl中级第四章课后习题

    1.下列表达式各表示什么不同的含义: $ginger->[2][1] ${$ginger[2]}[1] $ginger->[2]->[1] ${$ginger->[2]}[1] ...

  3. python语言程序设计基础(嵩天)第四章课后习题部分答案

    p121: *题4.1:猜数字游戏.在程序中预设一个0~9之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示“遗憾,太大了!”:小于预设的数,显示“遗憾,太小了!”,如此循环,直至猜中该数 ...

  4. 面向对象程序设计第四单元总结(UML系列)

    2019面向对象程序设计第四单元总结 前言 ​ 本单元是面向对象程序设计课程的最后一个单元了,本单元是和UML模型相关,也就是说,我们需要正确理解UML模型的基础上,对构建出的UML模型进行解析,但是 ...

  5. Java面向对象程序设计第14章3-8和第15章6

    Java面向对象程序设计第14章3-8和第15章6 3.完成下面方法中的代码,要求建立一个缓冲区,将字节输入流中的内容转为字符串. import java.io.*; public class tes ...

  6. Java面向对象程序设计第9章1-9

    Java面向对象程序设计第9章1-9 1. 线程和进程的联系和区别是什么? 联系: 一个进程可以包括多个线程. 区别: 进程: 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是系统 ...

  7. Java面向对象程序设计第8章3-5

    Java面向对象程序设计第8章3-5 3.String类型有什么特点? 一旦赋值,便不能更改其指向的字符对象 如果更改,则会指向一个新的字符对象 不能为null 4.String什么时候进行值比较,什 ...

  8. Java面向对象程序设计第7章1-8

    Java面向对象程序设计第7章1-8 1."程序中凡是可能出现异常的地方必须进行捕获或拋出",这句话对吗? 不对. 异常分两类,runtime异常和非runtime异常. runt ...

  9. C语言程序设计·谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂

    C语言程序小练习 1.用C语言设计程序算出1-1/2+1/3-14+1/5...+1/99-1/100的值 #include<stdio.h> int main() { ; double ...

随机推荐

  1. 清除文本中Html的标签

    /// <summary> /// 清除文本中Html的标签 /// </summary> /// <param name="Content"> ...

  2. BZOJ 2834: 回家的路 Dijkstra

    按照横,竖为方向跑一个最短路即可,算是水题~ #include <bits/stdc++.h> #define N 200005 #define E 2000000 #define set ...

  3. (十八)链接数据库,QSqlTableModel

    QMYSQL——mysql QSQLITE——sqlite QOICQ——orcale 所需头文件 .pro增加 sql #include <QSqlDatabase> #include ...

  4. Java 面试题 二

    1.线程怎么保持同步 关于线程同步(7种方式) --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3897440.html"谢谢 ...

  5. 数据结构实验之链表三:链表的逆置(SDUT 2118)

    题目链接 #include <bits/stdc++.h> using namespace std; struct node { int data; struct node *next; ...

  6. poj1737

    Connected Graph POJ - 1737 An undirected graph is a set V of vertices and a set of E∈{V*V} edges.An ...

  7. 安装mongodb-window10版

    第一.下载mongodb 官方地址:https://www.mongodb.com/ 第二步mongodb安装 运行mongodb-win32-x86_64-2008plus-ssl-v3.4-lat ...

  8. Leetcode题目104.二叉树的最大深度(DFS+BFS简单)

    题目描述: 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null, ...

  9. MySQL 中<=>用法(长知识)

    https://www.runoob.com/mysql/mysql-operator.html MySQL 运算符 本章节我们主要介绍 MySQL 的运算符及运算符的优先级. MySQL 主要有以下 ...

  10. 限定某个业务控制方法,只允许GET或POST请求方式访问

    可以在业务控制方法前,指明该业务控制方法只能接收GET或POST的请求 @Controller @RequestMapping(value="/user") public clas ...