不是从第一题开始的,因为我刚准备把代码粘到CSDN上面,可以给自己看,也有可能启发后来者。

机会是留给有准备的人的      ——路易斯·巴斯德

先写下第12周慕课学习总结吧!

  1. 多态就是将运算符重载,将函数重载,实现不同的功能。
  2. 编译时多态通过重载(函数重载,运算符重载)来实现,运行时多态通过虚函数来实现。
  3. 运行时多态究竟运行哪个函数,只有运行时知道。
  4. 一个替换原则:凡是基类对象出现的场合,都可以用公有派生类对象取代。
  5. 三个替换形式:
  6.   1.派生类对象给基类对象赋值,
  7.   2.派生类对象可以初始化基类对象的引用。
  8.   3.可以令基类对象的指针指向派生类对象,即将派生类对象的地址传给基类指针。

    (如:mobile &p4=gsm)
  9. 使用虚函数可以实现动态绑定。在函数 的头部加上virtual就是虚函数。事实上,在基类中被声明为virtual并在一个或多个派生类中被重新定义的同名成员函数,叫做虚函数。(派生类的函数头部也可以加virtual,也可以省略)
  10. 虚函数的用途:实现运行时的多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数。
  11. 不用来声明对象的类叫做抽象类,这个类只供继承,
  12. 纯虚函数:virtual 函数返回类型 函数名(参数表)= 0;
  13. 抽象类不能声明对象,只能被继承。还可以定义抽象类的指针或引用。
  14. 运算符重载:运算符的从新定义。
  15. <类型> <类名>::operator <操作符(如:+ - * / )>(<参数表>){函数体}

4.重载矩阵加法运算

MATRIX就是矩阵的意思

  1. #include <iostream>
  2. using namespace std;
  3. class MATRIX
  4. {
  5. private:
  6. int h,l;
  7. double a[100][100];
  8. public:
  9. MATRIX(){}
  10. void set(int h,int l)
  11. {
  12. this->h = h;
  13. this->l = l;
  14. for(int i=0;i < h;i++)
  15. {
  16. for(int j=0;j < l;j++)
  17. {
  18. cin >> a[i][j];
  19. }
  20. }
  21. }
  22. MATRIX operator + (MATRIX b)
  23. {
  24. MATRIX c;
  25. c.h = h;
  26. c.l = l;
  27. for(int i=0;i < h;i++)
  28. {
  29. for(int j=0;j < l;j++)
  30. {
  31. c.a[i][j] = a[i][j] + b.a[i][j];
  32. }
  33. }
  34. return c;
  35. }
  36. void show()
  37. {
  38. for(int i=0;i < h;i++)
  39. {
  40. for(int j=0;j < l;j++)
  41. {
  42. cout << a[i][j];
  43. if(j != l-1)
  44. {
  45. cout << " ";
  46. }
  47. }
  48. cout << endl;
  49. }
  50. }
  51. };
  52. int main()
  53. {
  54. int h=0,l=0;
  55. cin >> h >> l;
  56. MATRIX a,b,c;
  57. a.set(h,l);
  58. b.set(h,l);
  59. c = a + b;
  60. c.show();
  61. return 0;
  62. }
  63. //个人感觉这篇文章还是新手友好的

5.纯虚函数与基类指针数组的应用

以下是题干信息

  1. 题目内容:
  2. 定义抽象基类Shape,
  3. 其中纯虚函数printName()输出几何图形的名称和相应的成员数据、纯虚函数printArea()计算几何图形的面积。并由Shape类派生出5个派生类:Circle(圆形),数据成员为半径、Square(正方形)
  4. ,数据成员为边长、Rectangle(长方形) ,数据成员为长和宽、Trapezoid(梯形) ,数据成员为上底、下底和高、Triangle(三角形)
  5. ,数据成员为底和高。测试过程,定义一个指向基类的指针数组,使其每个元素指向一个动态产生的派生类对象,分别调用相应的成员函数显示各个几何图形的属性及面积,最终输出总面积值。
  6. 输入格式:
  7. 依次输入圆半径、正方形边长、长方形长宽、梯形上底下底和高、三角形底边和高,均为实数。
  8. 输出格式:
  9. 请参考输出样例,建议直接复制样例中的部分文字粘贴进自己的代码。圆周率取 3.14159
  10. 注意输出中的标点符号、空格。
  11. 输入样例:
  12. 10
  13. 5
  14. 2 4
  15. 1 2 3
  16. 4 3
  17. 输出样例:
  18. 圆:半径=10,面积:314.159
  19. 正方形:边长=5,面积:25
  20. 长方形:长=2,宽=4,面积:8
  21. 梯形:上底=1,下底=2,高=3,面积:4.5
  22. 三角形:底边=4,高=3,面积:6
  23. 总面积:357.659

  此题没什么技巧,就是耗时间嘛。但是如果你实在不会,希望你可以从文章里得到一些启示

  1. #include <iostream>
  2. using namespace std;
  3. class Shape
  4. {
  5. public:
  6. virtual double printArea() = 0;
  7. virtual void printName() = 0;
  8. };
  9. class Circle:public Shape
  10. {
  11. private:
  12. double radius;
  13. public:
  14. Circle(double r)
  15. {
  16. radius = r;
  17. }
  18. double printArea()
  19. {
  20. return 3.14159 * radius * radius;
  21. }
  22. void printName()
  23. {
  24. cout << "圆:半径=" << radius << ",面积:";
  25. cout << printArea() << endl;
  26. }
  27. };
  28. class Square:public Shape
  29. {
  30. private:
  31. double a;
  32. public:
  33. Square(double a)
  34. {
  35. this->a = a;
  36. }
  37. double printArea()
  38. {
  39. return a * a;
  40. }
  41. void printName()
  42. {
  43. cout << "正方形:边长=" << a << ",面积:";
  44. cout << printArea() << endl;
  45. }
  46. };
  47. class Rectangle:public Shape
  48. {
  49. private:
  50. double a,b;
  51. public:
  52. Rectangle(double a,double b)
  53. {
  54. this->a = a;
  55. this->b = b;
  56. }
  57. double printArea()
  58. {
  59. return a * b;
  60. }
  61. void printName()
  62. {
  63. cout << "长方形:长=" << a << ",宽=" << b << ",面积:";
  64. cout << printArea() << endl;
  65. }
  66. };
  67. class Trapezoid:public Shape
  68. {
  69. private:
  70. double a,b,h;
  71. public:
  72. Trapezoid(double a, double b, double h)
  73. {
  74. this->a = a;
  75. this->b = b;
  76. this->h = h;
  77. }
  78. double printArea()
  79. {
  80. return 0.5 * (a + b) * h;
  81. }
  82. void printName()
  83. {
  84. cout << "梯形:上底=" << a << ",下底=" << b << ",高=" << h << ",面积:";
  85. cout << printArea() << endl;
  86. }
  87. };
  88. class Triangle:public Shape
  89. {
  90. private:
  91. double a,h;
  92. public:
  93. Triangle(double a,double h)
  94. {
  95. this->a = a;
  96. this->h = h;
  97. }
  98. double printArea()
  99. {
  100. return 0.5 * a * h;
  101. }
  102. void printName()
  103. {
  104. cout << "三角形:底边=" << a << ",高=" << h << ",面积:";
  105. cout << printArea() << endl;
  106. }
  107. };
  108. int main()
  109. {
  110. Shape *p1,*p2,*p3,*p4,*p5; //基类对象指针
  111. double r,a,b,h; //临时变量
  112. double sum;
  113. cin >> r;
  114. p1 = new Circle(r);
  115. cin >> a;
  116. p2 = new Square(a);
  117. cin >> a >> b;
  118. p3 = new Rectangle(a,b);
  119. cin >> a >> b >> h;
  120. p4 = new Trapezoid(a,b,h);
  121. cin >> a >> h;
  122. p5 = new Triangle(a,h);
  123. p1->printName();
  124. p2->printName();
  125. p3->printName();
  126. p4->printName();
  127. p5->printName();
  128. sum = p1->printArea() + p2->printArea() + p3->printArea() + p4->printArea() + p5->printArea();
  129. cout << "总面积:" << sum << endl;
  130. return 0;
  131. }

好了,这周的内容到此结束

西安交通大学c++[mooc]课后题12章(只有后两题)的更多相关文章

  1. 实验5&期中考试后两题

    实验内容1: #include <iostream> #include <vector> #include <string> using namespace std ...

  2. ASM:《X86汇编语言-从实模式到保护模式》第12章:存储器的保护

    12章其实是11章的拓展,代码基本不变,就是在保护模式下展开讨论. ★PART1:存储器的保护机制 1. 修改段寄存器的保护 当执行把段选择子传到段寄存器的选择器部分的时候,处理器固件在完成传送之前, ...

  3. C++ Primer 5th 第12章 动态内存

    练习12.1:在此代码的结尾,b1 和 b2 各包含多少个元素? StrBlob b1; { StrBlob b2 = {"a", "an", "th ...

  4. JS读书心得:《JavaScript框架设计》——第12章 异步处理

    一.何为异步   执行任务的过程可以被分为发起和执行两个部分. 同步执行模式:任务发起后必须等待直到任务执行完成并返回结果后,才会执行下一个任务. 异步执行模式:任务发起后不等待任务执行完成,而是马上 ...

  5. 敏捷软件开发:原则、模式与实践——第12章 ISP:接口隔离原则

    第12章 ISP:接口隔离原则 不应该强迫客户程序依赖并未使用的方法. 这个原则用来处理“胖”接口所存在的缺点.如果类的接口不是内敛的,就表示该类具有“胖”接口.换句话说,类的“胖”接口可以分解成多组 ...

  6. Linux就这个范儿 第12章 一个网络一个世界

    Linux就这个范儿 第12章 一个网络一个世界 与Linux有缘相识还得从一项开发任务说起.十八年前,我在Nucleus  OS上开发无线网桥AP,需要加入STP生成树协议(SpanningTree ...

  7. 阅读<构建之法>第三10、11、12章

    第10章:典型用户和场景 阅读了第10章之后,我知道典型用户很重要,典型用户是某类群体的代表,他们的观点能够反映一类人的观点与对产品的要求,那么要怎么样才能够从一类群体里,选择正确的典型用户反映我们研 ...

  8. CSS3秘笈第三版涵盖HTML5学习笔记9~12章

    第9章,装饰网站导航 限制访问,处于隐私方面考虑,浏览器已经开始限制可以对伪类:visited应用哪些CSS属性了.其中包括对已访问过的链接定义color.background-color.borde ...

  9. Android开发艺术探索》读书笔记 (12) 第12章 Bitmap的加载和Cache

    第12章 Bitmap的加载和Cache 12.1 Bitmap的高速加载 (1)Bitmap是如何加载的?BitmapFactory类提供了四类方法:decodeFile.decodeResourc ...

随机推荐

  1. B - The Staircases (dp)

    One curious child has a set of N little bricks. From these bricks he builds different staircases. St ...

  2. Codeforces 1324E Sleeping Schedule DP

    题意 给你一个长度为\(n\)的数组\(a\)和3个数字\(h,l和r\).\(t\)初始为0,每次可以使\(t=(t+a_i) \% h\)或者\(t=(t+a_i-1)\%h\),如果这时\(t\ ...

  3. openshift 4.3中安装helm3并通过helm方式部署应用

    openshift 4.3中安装helm3并通过helm方式部署应用 简介 Helm是一个命令行界面(CLI)工具,可简化将应用程序和服务部署到OpenShift Container Platform ...

  4. 蒲公英 &#183; JELLY技术周刊 Vol.21 -- 技术周刊 &#183; React Hooks vs Vue 3 + Composition API

    蒲公英 · JELLY技术周刊 Vol.21 选 React 还是 Vue,每个人心中都会有自己的答案,有很多理由去 pick 心水的框架,但是当我们扪心自问,我们真的可以公正的来评价这两者之间的差异 ...

  5. 利用预编译解决C/C++重复定义的错误 -2020.09.13

    利用预编译解决C/C++重复定义的错误 -2020.09.13 我们现在有main.c和function.h两个文件 main.c #include <stdio.h> #include ...

  6. A Funny Game(POJ 2484)

    原题如下: A Funny Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7108   Accepted: 446 ...

  7. Django循环创造div后,对各个div操作后触发事件,传递数据(Django九)

    前面我用for循环创建了div,每个div中有各自的数据以及同样的布局 效果图如下:部分代码如下: 现在,我希望在点击每个div里的发表按钮时,能在js里获取{{problem.pro_id}}以及{ ...

  8. 记录一次OCR程序开发的尝试

    记录一次OCR程序开发的尝试 最近工作中涉及到一部分文档和纸质文档的校验工作,就想把纸质文件拍下来,用文字来互相校验.想到之前调用有道智云接口做了文档翻译.看了下OCR文字识别的API接口,有道提供了 ...

  9. 解压gzip格式文件(包括网页)

    先上源码 参数说名: - source :gzip格式流内容. - len: gzip流长度 - dest: 解压后字符流指针 - gzip: 压缩标志,非0时解压gzip格式,否则按照zip解压 说 ...

  10. 初学 React native | 环境搭建(在模拟器上运行)

    我的电脑是windows 所以就以 windows上+Android 配置React native 环境 网上的安装教程非常多,我总结了一下,配置环境时出错原因主要是node java python ...