【C++】——多态性与模板(其二)

简介: 【C++】——多态性与模板(其二)

🎯问题一

给出下面的抽象基类container;要求建立2个继承container的派生类Sphere与Cylinder,每一个派生类都包含虚函数surface_area()和 volume(),分别用来计算球体和圆柱体的表面积及体积。写出主程序,应用C++的多态性,分别计算半径为5.0的球体以及半径为5.0和高为6.0的圆柱体的表面积和体积。🎯问题一


bf58f147f221fb7b7f46208cd62a0329_6d4f7ae56ed60d5ced2ca5226e777798.png


🎯问题二

已知一个有若干元素的数组arr,使用函数模板求该数组的的最大值,主函数定义数组,使用模板函数求最大值并输出。


3d3de45a0dcbc85eb5d762d16edbdef6_af7d82a84d6d6395ff0641068f5d48f3.png


🎯问题三

编写一个类模板对数组元素进行遍历输出、数组求和等,主函数创建数组类对象,调用函数遍历输出及求和。


f4354b0eb2901c9886b9c0d73c422dd6_32d608e11dfa2d7cb8ab173d33d93257.png


🎯答案一

#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;
 
}
相关文章
|
3月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
126 10
|
2月前
|
安全 编译器 C++
【C++11】可变模板参数详解
本文详细介绍了C++11引入的可变模板参数,这是一种允许模板接受任意数量和类型参数的强大工具。文章从基本概念入手,讲解了可变模板参数的语法、参数包的展开方法,以及如何结合递归调用、折叠表达式等技术实现高效编程。通过具体示例,如打印任意数量参数、类型安全的`printf`替代方案等,展示了其在实际开发中的应用。最后,文章讨论了性能优化策略和常见问题,帮助读者更好地理解和使用这一高级C++特性。
65 4
|
2月前
|
算法 编译器 C++
【C++】模板详细讲解(含反向迭代器)
C++模板是泛型编程的核心,允许编写与类型无关的代码,提高代码复用性和灵活性。模板分为函数模板和类模板,支持隐式和显式实例化,以及特化(全特化和偏特化)。C++标准库广泛使用模板,如容器、迭代器、算法和函数对象等,以支持高效、灵活的编程。反向迭代器通过对正向迭代器的封装,实现了逆序遍历的功能。
37 3
|
2月前
|
编译器 C++
【c++】模板详解(1)
本文介绍了C++中的模板概念,包括函数模板和类模板,强调了模板作为泛型编程基础的重要性。函数模板允许创建类型无关的函数,类模板则能根据不同的类型生成不同的类。文章通过具体示例详细解释了模板的定义、实例化及匹配原则,帮助读者理解模板机制,为学习STL打下基础。
34 0
|
3月前
|
编译器 程序员 C++
【C++打怪之路Lv7】-- 模板初阶
【C++打怪之路Lv7】-- 模板初阶
24 1
|
3月前
|
存储 编译器 C++
【C++篇】引领C++模板初体验:泛型编程的力量与妙用
【C++篇】引领C++模板初体验:泛型编程的力量与妙用
55 9
|
3月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
74 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
3月前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
99 2
|
3月前
|
存储 算法 编译器
【C++】初识C++模板与STL
【C++】初识C++模板与STL
|
3月前
|
编译器 C++
【C++】模板进阶:深入解析模板特化
【C++】模板进阶:深入解析模板特化
120 0