🎃个人专栏:
🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客
🐳Java基础:Java基础_IT闫的博客-CSDN博客
🐋c语言:c语言_IT闫的博客-CSDN博客
🐟MySQL:数据结构_IT闫的博客-CSDN博客
🐠数据结构:数据结构_IT闫的博客-CSDN博客
💎C++:C++_IT闫的博客-CSDN博客
🥽C51单片机:C51单片机(STC89C516)_IT闫的博客-CSDN博客
💻基于HTML5的网页设计及应用:基于HTML5的网页设计及应用_IT闫的博客-CSDN博客
🥏python:python_IT闫的博客-CSDN博客
🐠离散数学:离散数学_IT闫的博客-CSDN博客
欢迎收看,希望对大家有用!
🎯问题一
给出下面的抽象基类container;要求建立2个继承container的派生类Sphere与Cylinder,每一个派生类都包含虚函数surface_area()和 volume(),分别用来计算球体和圆柱体的表面积及体积。写出主程序,应用C++的多态性,分别计算半径为5.0的球体以及半径为5.0和高为6.0的圆柱体的表面积和体积。🎯问题一
🎯问题二
已知一个有若干元素的数组arr,使用函数模板求该数组的的最大值,主函数定义数组,使用模板函数求最大值并输出。
🎯问题三
编写一个类模板对数组元素进行遍历输出、数组求和等,主函数创建数组类对象,调用函数遍历输出及求和。
🎯答案一
#include <iostream>using namespace std;class Container { //声明抽象类containerprotected:double radius;public:Container(double _radius) { //抽象类container的构造函数radius=_radius;}virtual double surface_area()=0; //纯虚函数surface_areavirtual double volume()=0; //纯虚函数volume};/****************************************************///派生类sphere pi=3.14159 s=4*pi*r*r v=4/3*pi*r*r*rclass Sphere:public Container {public:Sphere(double _radius);double surface_area();double volume();};Sphere::Sphere(double _radius):Container(_radius) {}double Sphere::surface_area() {//s=4*pi*r*rreturn 4*3.14159*radius*radius;}double Sphere::volume() {//v=4/3*pi*r*r*rreturn 4.0/3*3.14159*radius*radius*radius;}/****************************************************///派生类Cylinderclass Cylinder:public Container {public:Cylinder(double _radius,double _height);double surface_area();double volume();private:double height;};Cylinder::Cylinder(double _radius,double _height):Container(_radius) {height=_height;}double Cylinder::surface_area() {return 2*3.14159*radius*height+2*3.14159*radius*radius;}double Cylinder::volume() {return 3.14159*radius*radius*height;;}int main() {Sphere sphere(2);cout<<"球体表面积:"<<sphere.surface_area()<<endl;cout<<"球体体积:"<<sphere.volume()<<endl;Cylinder Cylinder(2,3);cout<<"圆柱体表面积:"<<Cylinder.surface_area()<<endl;cout<<"圆柱体体积:"<<Cylinder.volume()<<endl;}
🎯答案二
#include <iostream>using namespace std;/****************************************************///函数模板max_arr template <class T>T max_arr(T arr[],int n) {T max=arr[0];for(int i=1; i<n; i++)if(max<arr[i])max=arr[i];return max;}/****************************************************/int main() {int a[5],k;for(k=0;k<5;k++)cin>>a[k];cout<<"max="<<max_arr<int>(a,5)<<endl;}
🎯答案三
#include <iostream>using namespace std;template<class T> //类模板class Array {private:int _size;T* _ptr;public:Array(T arr[], int s);void show();T sum();};//构造函数template<class T>Array<T>::Array(T arr[], int s) {_ptr = new T[s];_size = s;for (int i=0; i<_size; i++) {_ptr[i]=arr[i];}}//遍历输出函数template<class T>void Array<T>::show() {for (int i=0; i<_size; i++)cout<<*(_ptr + i)<<" ";cout<<endl;}/****************************************************///求和函数template<class T>T Array<T>::sum() {T s=0;for (int i=0; i<_size; i++)s=s+*(_ptr + i);return s;}/****************************************************/int main() {int iArr[6] = { 2, 1, 3, 5, 4, 6 };Array<int> a1(iArr, 6);a1.show();cout<<"sum="<<a1.sum()<<endl;return 0;}