西安交通大学c++[mooc]课后题12章(只有后两题)
不是从第一题开始的,因为我刚准备把代码粘到CSDN上面,可以给自己看,也有可能启发后来者。
机会是留给有准备的人的 ——路易斯·巴斯德
先写下第12周慕课学习总结吧!
- 多态就是将运算符重载,将函数重载,实现不同的功能。
- 编译时多态通过重载(函数重载,运算符重载)来实现,运行时多态通过虚函数来实现。
- 运行时多态究竟运行哪个函数,只有运行时知道。
- 一个替换原则:凡是基类对象出现的场合,都可以用公有派生类对象取代。
- 三个替换形式:
- 1.派生类对象给基类对象赋值,
- 2.派生类对象可以初始化基类对象的引用。
- 3.可以令基类对象的指针指向派生类对象,即将派生类对象的地址传给基类指针。
(如:mobile &p4=gsm) - 使用虚函数可以实现动态绑定。在函数 的头部加上virtual就是虚函数。事实上,在基类中被声明为virtual并在一个或多个派生类中被重新定义的同名成员函数,叫做虚函数。(派生类的函数头部也可以加virtual,也可以省略)
- 虚函数的用途:实现运行时的多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数。
- 不用来声明对象的类叫做抽象类,这个类只供继承,
- 纯虚函数:virtual 函数返回类型 函数名(参数表)= 0;
- 抽象类不能声明对象,只能被继承。还可以定义抽象类的指针或引用。
- 运算符重载:运算符的从新定义。
- <类型> <类名>::operator <操作符(如:+ - * / )>(<参数表>){函数体}
4.重载矩阵加法运算
MATRIX就是矩阵的意思
#include <iostream>
using namespace std;
class MATRIX
{
private:
int h,l;
double a[100][100];
public:
MATRIX(){}
void set(int h,int l)
{
this->h = h;
this->l = l;
for(int i=0;i < h;i++)
{
for(int j=0;j < l;j++)
{
cin >> a[i][j];
}
}
}
MATRIX operator + (MATRIX b)
{
MATRIX c;
c.h = h;
c.l = l;
for(int i=0;i < h;i++)
{
for(int j=0;j < l;j++)
{
c.a[i][j] = a[i][j] + b.a[i][j];
}
}
return c;
}
void show()
{
for(int i=0;i < h;i++)
{
for(int j=0;j < l;j++)
{
cout << a[i][j];
if(j != l-1)
{
cout << " ";
}
}
cout << endl;
}
}
};
int main()
{
int h=0,l=0;
cin >> h >> l;
MATRIX a,b,c;
a.set(h,l);
b.set(h,l);
c = a + b;
c.show();
return 0;
}
//个人感觉这篇文章还是新手友好的
5.纯虚函数与基类指针数组的应用
以下是题干信息
题目内容:
定义抽象基类Shape,
其中纯虚函数printName()输出几何图形的名称和相应的成员数据、纯虚函数printArea()计算几何图形的面积。并由Shape类派生出5个派生类:Circle(圆形),数据成员为半径、Square(正方形)
,数据成员为边长、Rectangle(长方形) ,数据成员为长和宽、Trapezoid(梯形) ,数据成员为上底、下底和高、Triangle(三角形)
,数据成员为底和高。测试过程,定义一个指向基类的指针数组,使其每个元素指向一个动态产生的派生类对象,分别调用相应的成员函数显示各个几何图形的属性及面积,最终输出总面积值。
输入格式:
依次输入圆半径、正方形边长、长方形长宽、梯形上底下底和高、三角形底边和高,均为实数。
输出格式:
请参考输出样例,建议直接复制样例中的部分文字粘贴进自己的代码。圆周率取 3.14159
注意输出中的标点符号、空格。
输入样例:
10
5
2 4
1 2 3
4 3
输出样例:
圆:半径=10,面积:314.159
正方形:边长=5,面积:25
长方形:长=2,宽=4,面积:8
梯形:上底=1,下底=2,高=3,面积:4.5
三角形:底边=4,高=3,面积:6
总面积:357.659
此题没什么技巧,就是耗时间嘛。但是如果你实在不会,希望你可以从文章里得到一些启示
#include <iostream>
using namespace std;
class Shape
{
public:
virtual double printArea() = 0;
virtual void printName() = 0;
};
class Circle:public Shape
{
private:
double radius;
public:
Circle(double r)
{
radius = r;
}
double printArea()
{
return 3.14159 * radius * radius;
}
void printName()
{
cout << "圆:半径=" << radius << ",面积:";
cout << printArea() << endl;
}
};
class Square:public Shape
{
private:
double a;
public:
Square(double a)
{
this->a = a;
}
double printArea()
{
return a * a;
}
void printName()
{
cout << "正方形:边长=" << a << ",面积:";
cout << printArea() << endl;
}
};
class Rectangle:public Shape
{
private:
double a,b;
public:
Rectangle(double a,double b)
{
this->a = a;
this->b = b;
}
double printArea()
{
return a * b;
}
void printName()
{
cout << "长方形:长=" << a << ",宽=" << b << ",面积:";
cout << printArea() << endl;
}
};
class Trapezoid:public Shape
{
private:
double a,b,h;
public:
Trapezoid(double a, double b, double h)
{
this->a = a;
this->b = b;
this->h = h;
}
double printArea()
{
return 0.5 * (a + b) * h;
}
void printName()
{
cout << "梯形:上底=" << a << ",下底=" << b << ",高=" << h << ",面积:";
cout << printArea() << endl;
}
};
class Triangle:public Shape
{
private:
double a,h;
public:
Triangle(double a,double h)
{
this->a = a;
this->h = h;
}
double printArea()
{
return 0.5 * a * h;
}
void printName()
{
cout << "三角形:底边=" << a << ",高=" << h << ",面积:";
cout << printArea() << endl;
}
};
int main()
{
Shape *p1,*p2,*p3,*p4,*p5; //基类对象指针
double r,a,b,h; //临时变量
double sum;
cin >> r;
p1 = new Circle(r);
cin >> a;
p2 = new Square(a);
cin >> a >> b;
p3 = new Rectangle(a,b);
cin >> a >> b >> h;
p4 = new Trapezoid(a,b,h);
cin >> a >> h;
p5 = new Triangle(a,h);
p1->printName();
p2->printName();
p3->printName();
p4->printName();
p5->printName();
sum = p1->printArea() + p2->printArea() + p3->printArea() + p4->printArea() + p5->printArea();
cout << "总面积:" << sum << endl;
return 0;
}
好了,这周的内容到此结束
西安交通大学c++[mooc]课后题12章(只有后两题)的更多相关文章
- 实验5&期中考试后两题
实验内容1: #include <iostream> #include <vector> #include <string> using namespace std ...
- ASM:《X86汇编语言-从实模式到保护模式》第12章:存储器的保护
12章其实是11章的拓展,代码基本不变,就是在保护模式下展开讨论. ★PART1:存储器的保护机制 1. 修改段寄存器的保护 当执行把段选择子传到段寄存器的选择器部分的时候,处理器固件在完成传送之前, ...
- C++ Primer 5th 第12章 动态内存
练习12.1:在此代码的结尾,b1 和 b2 各包含多少个元素? StrBlob b1; { StrBlob b2 = {"a", "an", "th ...
- JS读书心得:《JavaScript框架设计》——第12章 异步处理
一.何为异步 执行任务的过程可以被分为发起和执行两个部分. 同步执行模式:任务发起后必须等待直到任务执行完成并返回结果后,才会执行下一个任务. 异步执行模式:任务发起后不等待任务执行完成,而是马上 ...
- 敏捷软件开发:原则、模式与实践——第12章 ISP:接口隔离原则
第12章 ISP:接口隔离原则 不应该强迫客户程序依赖并未使用的方法. 这个原则用来处理“胖”接口所存在的缺点.如果类的接口不是内敛的,就表示该类具有“胖”接口.换句话说,类的“胖”接口可以分解成多组 ...
- Linux就这个范儿 第12章 一个网络一个世界
Linux就这个范儿 第12章 一个网络一个世界 与Linux有缘相识还得从一项开发任务说起.十八年前,我在Nucleus OS上开发无线网桥AP,需要加入STP生成树协议(SpanningTree ...
- 阅读<构建之法>第三10、11、12章
第10章:典型用户和场景 阅读了第10章之后,我知道典型用户很重要,典型用户是某类群体的代表,他们的观点能够反映一类人的观点与对产品的要求,那么要怎么样才能够从一类群体里,选择正确的典型用户反映我们研 ...
- CSS3秘笈第三版涵盖HTML5学习笔记9~12章
第9章,装饰网站导航 限制访问,处于隐私方面考虑,浏览器已经开始限制可以对伪类:visited应用哪些CSS属性了.其中包括对已访问过的链接定义color.background-color.borde ...
- Android开发艺术探索》读书笔记 (12) 第12章 Bitmap的加载和Cache
第12章 Bitmap的加载和Cache 12.1 Bitmap的高速加载 (1)Bitmap是如何加载的?BitmapFactory类提供了四类方法:decodeFile.decodeResourc ...
随机推荐
- P1164 小A点菜(动态规划背包问题)
题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过ui ...
- rpc中的高并发
手写一个高性能的rpc框架 模拟服务端,运行main函数,相当于启动服务器 public class ServerApplication { public static void main(Strin ...
- Google Code Jam 2020 Round1B Expogo
题意 你初始位于\((0,0)\),然后你想要到\((x,y)\)去,第\(i\)步的步长是\(2^{i-1}\),要求用最少的步数走到\((x,y)\). 解题思路 首先可以推出,走\(i\)步可以 ...
- Linux通过命令行将英文改成中文
1.首先查看当前系统是否有中文语言包 locale -a 如果没有zh_CN.utf8,就需要下载中文语言包,否则,如果有中文语言包,跳过第二步. 2.安装中文语言包 Ubuntu: sudo apt ...
- oracle之三备份恢复概述
备份恢复概述 1.1 数据库故障的类型: 1)user process failure: pmon 自动处理 2)instance failure: smon 自动处理 3)user errors : ...
- [LeetCode] 221. 最大正方形(DP)
题目 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 ...
- [算法题]最小m划分(划分DP)
题目描述 给定 n 个整数组成的序列,将序列分割为 m 段,如何分割才能使这 m 段子序列的和的最大值达到最小? 题解 状态表示 dp[i][j]表示前i个元素划分j段 子序列和的最大值的最小值 状态 ...
- 【深入理解Linux内核架构】3.3 页表
页表:用于建立用户进程空间的虚拟地址空间和系统物理内存(内存.页帧)之间的关联. 向每个进程提供一致的虚拟地址空间. 将虚拟内存页映射到物理内存,因而支持共享内存的实现. 可以在不增加物理内存的情况下 ...
- Docker实战(6): 导出docker镜像离线包
前言 离线环境安装Docker 镜像,我已知两种情况,以下操作我将采用在可访问外网的机器上通过镜像迁移的方式来给离线环境安装. 环境:服务器node1可访问外网.服务器node2无法访问外网 两台机器 ...
- ava实现时钟小程序【代码】
其实这个程序并不难,主要是用Java 2D画图,弄一个线程,每隔一秒,依照时针分针秒针各自的速度重新计算它们走过的角度(相对12点方向顺时针偏离的角度),利用这个角度算出它们各自端点的坐标,重绘一次表 ...