🎃个人专栏:
🐬 算法设计与分析:算法设计与分析_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 { //声明抽象类container
protected:
double radius;
public:
Container(double _radius) { //抽象类container的构造函数
radius=_radius;
}
virtual double surface_area()=0; //纯虚函数surface_area
virtual double volume()=0; //纯虚函数volume
};
/****************************************************/
//派生类sphere pi=3.14159 s=4*pi*r*r v=4/3*pi*r*r*r
class 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*r
return 4*3.14159*radius*radius;
}
double Sphere::volume() {
//v=4/3*pi*r*r*r
return 4.0/3*3.14159*radius*radius*radius;
}
/****************************************************/
//派生类Cylinder
class 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;
}