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 ; }
运行结果:

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

改进版:有两个矩阵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++面向对象程序设计第四章课后习题的更多相关文章
- C程序设计(第四版)课后习题完整版 谭浩强编著
//复习过程中,纯手打,持续更新,觉得好就点个赞吧. 第一章:程序设计和C语言 习题 1.什么是程序?什么是程序设计? 答:程序就是一组计算机能识别和执行的指令.程序设计是指从确定任务到得到结果,写出 ...
- Perl中级第四章课后习题
1.下列表达式各表示什么不同的含义: $ginger->[2][1] ${$ginger[2]}[1] $ginger->[2]->[1] ${$ginger->[2]}[1] ...
- python语言程序设计基础(嵩天)第四章课后习题部分答案
p121: *题4.1:猜数字游戏.在程序中预设一个0~9之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示“遗憾,太大了!”:小于预设的数,显示“遗憾,太小了!”,如此循环,直至猜中该数 ...
- 面向对象程序设计第四单元总结(UML系列)
2019面向对象程序设计第四单元总结 前言 本单元是面向对象程序设计课程的最后一个单元了,本单元是和UML模型相关,也就是说,我们需要正确理解UML模型的基础上,对构建出的UML模型进行解析,但是 ...
- Java面向对象程序设计第14章3-8和第15章6
Java面向对象程序设计第14章3-8和第15章6 3.完成下面方法中的代码,要求建立一个缓冲区,将字节输入流中的内容转为字符串. import java.io.*; public class tes ...
- Java面向对象程序设计第9章1-9
Java面向对象程序设计第9章1-9 1. 线程和进程的联系和区别是什么? 联系: 一个进程可以包括多个线程. 区别: 进程: 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是系统 ...
- Java面向对象程序设计第8章3-5
Java面向对象程序设计第8章3-5 3.String类型有什么特点? 一旦赋值,便不能更改其指向的字符对象 如果更改,则会指向一个新的字符对象 不能为null 4.String什么时候进行值比较,什 ...
- Java面向对象程序设计第7章1-8
Java面向对象程序设计第7章1-8 1."程序中凡是可能出现异常的地方必须进行捕获或拋出",这句话对吗? 不对. 异常分两类,runtime异常和非runtime异常. runt ...
- C语言程序设计·谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂
C语言程序小练习 1.用C语言设计程序算出1-1/2+1/3-14+1/5...+1/99-1/100的值 #include<stdio.h> int main() { ; double ...
随机推荐
- JS 中获取服务器时间的注意点
在通过js获取服务器时间时,遇到了小小的问题,但造成的影响挺大的,所以写出来提醒大家,在获取服务器时间时一定要细心要多测试多验证. js 中使用以下方法获取服务器时间时要注意两点: 1.xhr.ope ...
- centos6.5linux安装docker之升级内核
一.运行docker Linux内核版本需要在3.8以上,针对centos6.5 内核为2.6的系统需要先升级内核.不然会特别卡 在yum的ELRepo源中,有mainline(4.5).long-t ...
- CSS实现太极效果
这个伪元素的位置对齐还妹搞明白 需要再研究研究 <html> <head> <title>taiji</title> <style> b ...
- .net上传整个文件夹
ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...
- 洛谷P4317 花神的数论题
洛谷题目链接 数位$dp$ 我们对$n$进行二进制拆分,于是就阔以像十进制一样数位$dp$了,基本就是套模板.. 接下来是美滋滋的代码时间~~~ #include<iostream> #i ...
- django-配置相关
1 自己配置一个静态文件夹 settings.py中 # 用户上传的文件配置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'me ...
- free 内存检测
free打印出的内存信息主要分为两种,一种是安装的内存,一种是用磁盘虚拟的内存,就是这里的Swap,相信装过Linux系统的同学肯定不陌生交换分区,这里Swap大小就是我们分区的时候分配的大小. 下面 ...
- python正则表达式的用法
import re r1 = re.compile(r'(?im)(?P<name></html>)$') content = """ <H ...
- Codeforces 645E. Intellectual Inquiry(DP,贪心)
Codeforces 645E. Intellectual Inquiry 题意:给定一串字符,由前k个小写拉丁字母组成,要求在该字符串后面补上n个字符(也从前k个小写拉丁字母里面选),使得最后得到的 ...
- vue实战教程
转载自 https://www.cnblogs.com/sunsets/p/7760454.html