内容提要

  1. 对于类MyString,要求重载‘+’运算符后可以计算表达式:a=b+c;表示两个字符串连接。
  2. 其中a,b,c都是类MyString的对象。
  3. 使用虚函数编写程序求球体和圆柱体的体积及表面积。
  4. 由于球体和圆柱体都可以看作由圆继承而来,
  5. 所以可以定义圆类Circle作为基类。
  6. 在Circle类中定义一个数据成员radius和两个虚函数area()和volume()。
  7. 由Circle类派生Sphere类和Column类。
  8. 在派生类中对虚函数area()和volume()重新定义,分别求球体和圆柱体的体积及表面积。
  9. 基本要求重载相应的运算符并编写程序,能运用虚函数编写程序测试并提交程序。

运算符重载:

#pragma warning(disable:4996)
#include <iostream>
#include <cstring>
#define N 32using namespace std;class MyString
{char *data;int len;
public:MyString() { data = new char[N]; len = 0; }MyString(const char* a);MyString& operator + (MyString & a);MyString& operator + (char * a);MyString& operator + (const char *a);MyString& operator = (MyString & a);MyString& operator = (char * a);MyString& operator = (const char *a);int strLen(void) { return len; }char * Data(void) { return data; }friend ostream & operator << (ostream &os, MyString &a);//friend istream & operator >> (istream &is, MyString &a);
};MyString::MyString(const char *a)
{data = new char[strlen(a) + 1];strcpy(data, a);len = strlen(a);
}MyString& MyString::operator + (MyString & a)
{if (len + a.strLen() > (N - 1)){//分配一段新的控件并将两个字符串拼接起来char *tmp = new char[len + a.strLen() + 1];strcpy(tmp, data);strcat(tmp, a.Data());data = tmp;}else{strcat(data, a.Data());}len += a.strLen();return *this;
}MyString& MyString::operator + (char * a)
{if (len + strlen(a) > (N - 1)){char *tmp = new char[len + strlen(a) + 1];strcpy(tmp, data);strcat(tmp, a);data = tmp;}else{strcat(data, a);}len += strlen(a);return *this;
}MyString& MyString::operator + (const char *a)
{if (len + strlen(a) > (N - 1)){char *tmp = new char[len + strlen(a) + 1];strcpy(tmp, data);strcat(tmp, a);data = tmp;}else{strcat(data, a);}len += strlen(a);return *this;
}MyString& MyString::operator = (MyString & a)
{if (&a != this && len > 0 && len < a.strLen()){delete[] data;data = new char[a.strLen() + 1];}strcpy(data, a.Data());len = a.strLen();return *this;
}MyString& MyString::operator = (char * a)
{if (data != nullptr && len < strlen(a)){delete[] data;data = new char[strlen(a) + 1];}strcpy(data, a);len = strlen(a);return *this;
}MyString& MyString::operator = (const char *a)
{if (data != nullptr && len < strlen(a)){delete[] data;data = new char[strlen(a) + 1];}strcpy(data, a);len = strlen(a);return *this;
}ostream & operator << (ostream &os, MyString &a)
{os << a.Data();return os;
}int main(void)
{MyString str("清风朗月 ");str = str + "辙思玄度";cout << str << endl;str = str + ".我与春风皆过客,谁共明月赴长生.";cout << str << endl;str = "你只见草木皆兵,我却看浩瀚苍穹";cout << str << endl;char tmp[] = "星河滚烫,你是人间理想;";str = tmp;cout << str << endl;system("pause");return 0;
}

虚函数的代码:

#include <iostream>
#define PIE 3.1415using namespace std;//圆,接口类
class Circle
{
protected:double radius;
public://表面积virtual double area(void) = 0;//体积virtual double volume(void) = 0;
};//球
class Sphere :public Circle
{
public:Sphere(double r = 0) { radius = r; }//表面积virtual double area(void){return 4.0 * PIE * radius * radius;}//体积virtual double volume(void){return (4.0 / 3.0) * PIE * radius * radius * radius;}
};//圆柱
class Column :public Circle
{
private:double height;
public:Column(double r = 0, double h = 0) { radius = r; height = h; }//表面积virtual double area(void){if (0 == height){//底面积return PIE * radius * radius;}return 2.0* PIE * radius * radius + PIE * 2.0 * radius * height;}//体积virtual double volume(void){if (0 == height){return 0;}return PIE * radius * radius * height;}
};int main(void)
{double rS, rC, h;while (true){cout << "请输入球体的半径:";cin >> rS;if (rS <= 0){cout << "请输入大于0的数据!\n\n";}elsebreak;}while (true){cout << "请输入圆柱体的半径:";cin >> rC;if (rC <= 0){cout << "请输入大于0的数据!\n\n";}elsebreak;}while (true){cout << "请输入圆柱体的高:";cin >> h;if (h <= 0){cout << "请输入大于0的数据!\n\n";}elsebreak;}Sphere sphere(rS);Column column(rC, h);cout << "球体的半径为:" << rS << endl<< "球体的表面积为:" << sphere.area() << endl<< "球体的体积为:" << sphere.volume() << endl << endl;cout << "圆柱体的半径为:" << rC << endl<< "圆柱体的表面积为:" << column.area() << endl<< "圆柱体的体积为:" << column.volume() << endl << endl;system("pause");return 0;
}

【C++---06】实验报告: 运算符重载和虚函数相关推荐

  1. C++实验五 运算符重载

    为实验二中编写的Songer(歌手)类重载"+".">"."==".前置"++".后置"++" ...

  2. C++运算符重载(友元函数方式)

    我们知道,C++中的运算符重载有两种形式:①重载为类的成员函数(见C++运算符重载(成员函数方式)),②重载为类的友元函数. 当重载友元函数时,将没有隐含的参数this指针.这样,对双目运算符,友元函 ...

  3. 运算符重载的非成员函数形式

    运算符重载为非成员函数的规则: 函数的形参代表依自左至右次序排列的各操作数 重载为非成员函数时 参数个数 = 原操作数个数(后置++.--除外,它们仍然为了区分前置++.--要强行加个int) 至少应 ...

  4. (P22)运算符重载:运算符重载 ,成员函数重载 ,非成员函数重载 ,运算符重载规则

    文章目录 1.运算符重载 2.成员函数重载 3.非成员函数重载 4.运算符重载规则 1.运算符重载 运算符重载允许把标准运算符(如+.-.*./.<.>等)应用于自定义数据类型的对象 直观 ...

  5. 【C++实验】运算符重载(两个矩阵相加)

    运算符重载 运算符重载概念 对已有的运算符赋予新的含义,用一个运算符表示不同功能的运算,从而适用于用户自定义类型的数据(比如复数.矩阵等)之间的运算 运算符重载方法 定义一个重载运算符函数,在需要时系 ...

  6. 【C++】C++类的学习(三)——运算符重载与友元函数

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 前面的两篇博文中介绍了类的一些基本特性,今天讲一讲运算符重载和友元. 运算符重载 运算 ...

  7. 坚持学习100天:多态(函数重载、虚函数和多态)

    前言 Hello,我是修齊. 学习C++的第一百零一十天,将近五一假期了,不浪漫亦是罪名,男生今年不能再挨批斗了,放假就得好好陪陪身边的人浪漫浪漫,生活,加油,学习加油. 在这里记录一些学习的东西和学 ...

  8. C++ 运算符重载和类型转换函数

    C++中对于用户自定义类对象的运算,要进行重载操作.如 class overload{public:... private:int num; }; overload o1, o2; int num; ...

  9. C++运算符重载形式--成员函数or友元函数?

    1.C++操作符重载形式-成员函数or友元函数 1.对运算符重载,需要坚持四项基本原则: 不可臆造运算符: 运算符原有操作数的个数.优先级和结合性不能改变: 操作数中至少一个是自定义类型: 保持重载运 ...

最新文章

  1. Visual Studio C++ 画图【极简版】
  2. php怎么从文件中读取数据库连接,PHP连接 读取 写入mysql数据库的方法 附常用代码...
  3. null对象 java_java中当给一个对象赋值为null时发生了什么
  4. php模拟请求get请求,php模拟get请求方法总结
  5. 2021年高考成绩查询陕西文科,2021年陕西高考文科二本分数线预测
  6. java同时满足语句_关于控制语句,下列哪些说法符合《阿里巴巴Java开发手册》:...
  7. LeetCode 1099. 小于 K 的两数之和(二分查找)
  8. 分辨垃圾材质自动分类 支付宝升级垃圾分类AI回收箱
  9. docker 查看实时日志
  10. IT公司100题-14-排序数组中和为给定值的两个数字
  11. 思考…求知(double和Double的区别)
  12. Html5——WebSocket
  13. js中比較好的继承方式
  14. linux内存源码分析 - 伙伴系统(释放页框)
  15. 算法工程师必备技能(Python 优化提速小技巧)
  16. ubuntu系统安装百度云盘
  17. python opencv之cvtColor
  18. 魔方还原算法学习笔记
  19. Java实现 蓝桥杯 算法训练 递归求二项式系数
  20. Mac VScode 常用快捷键

热门文章

  1. 闺蜜测试卷软件,2020闺蜜测试卷-抖音2020闺蜜测试卷官方版预约 v1.0-优盘手机站...
  2. 从csdn搬家到博客园的说明
  3. 长期在计算机房工作辐射大吗,在电脑机房工作,关于辐射.交换机.路由器
  4. 2.前端面试 css篇
  5. Web前端培训好找工作吗?
  6. TWT - laravel 学习心得体会一
  7. 柠檬班python自动化百度云_带柠字好听的名字大全
  8. 反射,折射,菲涅尔反射总结
  9. 情侣头像动漫:超宠老婆的情侣头像动漫高清
  10. IntelliJ IDEA 小贴士