这是书上的习题,我使用的是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. prevAll([expr]) 查找当前元素之前所有的同辈元素

    prevAll([expr]) 概述 查找当前元素之前所有的同辈元素 可以用表达式过滤.大理石构件维修 参数 exprStringV1.2 用于过滤的表达式 示例 描述: 给最后一个之前的所有div加 ...

  2. parent([expr]) 取得一个包含着所有匹配元素的唯一父元素的元素集合。

    parent([expr]) 概述 取得一个包含着所有匹配元素的唯一父元素的元素集合.大理石构件 你可以使用可选的表达式来筛选. 参数 exprStringV1.0 用来筛选的表达式 示例 描述: 查 ...

  3. 校验正确获取对象或者数组的属性方法(babel-plugin-idx/_.get)

    背景: 开发中经常遇到取值属性的时候,需要校验数值的有效性. 例如: 获取props对象里面的friends属性 props.user && props.user.friends &a ...

  4. Linq to XML - C#生成XML

    1.System.Xml.XmlDocument  XML file转成字符串  string path3 = @"C:\Users\test.xml";  XmlDocument ...

  5. 一个参数既可以是const还可以是volatile

    可以的,例如只读的状态寄存器.它是volatile因为它可能被意想不到地改变.它是const因为程序不应该试图去修改它. 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器 ...

  6. kdc 互信

    环境: 29.3.203.53(sysops00065017) 部署KDC Namnode Datanode,KDC负责TESTA.COM域的认证 29.3.203.54(sysops00065018 ...

  7. 使用python播放音乐

    1.首先安装pygame,pip install pygame 2.上代码: import time import pygame #音乐路径 filepath=r"C:\Users\1473 ...

  8. 5.rabbitmq--通配符模式Topics

    rabbitmq--通配符模式Topics topic模式也称为主题模式,其实他相对于routing模式最大的好处就是他多了一种匹配模式的路由,怎么理解匹配呢,其实就相当于我们之前正则的.*这种,不过 ...

  9. Mongodb内存管理和使用情况查询

    overview MongoDB使用的是内存映射存储引擎,即Memory Mapped Storage Engine,简称MMAP.MMAP可以把磁盘文件的一部分或全部内容直接映射到内存,这样文件中的 ...

  10. SQL和HQL 区别浅析!!!

    hql是面向对象查询,格式:from + 类名 + 类对象 + where + 对象的属性 sql是面向数据库表查询,格式:from + 表名 + where + 表中字段 1.查询 一般在hiber ...