赞
踩
一、问答题
1、 静态成员函数可以作为虚函数吗?
静态成员函数不可以是虚函数。静态函数是属于类的,不属于对象本身,自然无法有自己的虚函数表指针。
不能。因为静态成员函数是可以通过类名直接调用的,而虚函数必须通过对象调用,这样才可以确定到底调用哪个类中的函数,它们之间是相互矛盾的
2、 派生类中的虚函数和基类中的虚函数, 它们的函数返回值、 函数名、 函数参
数都必须相同吗?
必须相同。如果函数参数不同,当用指向派生类对象的基类指针,试图调用派生类中带参数的同名函数时,会报错(这时只能此指针只能调用基类中无参的那个函数);而返回值不同,使用基类指针调用此函数时也会直接报错,提示”重写虚函数的返回类型有差异”
3、 分析下面这段程序, 判断运行结果。
#include
using namespace std;
class A {
public:
virtual void func() {
cout << “fun in class A” << endl;
}
};
class B {
public:
virtual void func() {
cout << “func in class B” << endl;
}
};
class C :public A, public B {
public:
void func() {
cout << “func in class C” << endl;
}
};
int main() {
C c;
A & pa = c;
B & pb = c;
C & pc = c;
pa.func();
pb.func();
pc.func();
}
答: main函数中,通过使用引用,A类对象pa、B类对象pb、C类对象pc都指向了C类对象c,等同于基类(A、B)指针pa和pb,指向派生类(C)对象c。并且,func函数在基类A、B中都为虚函数,因此pa.func()和pb.func()实际上调用的是C类中的func函数。C类的应用pc指向自己类的对象c,因此pc.func()函数毫无疑问指的是自己类中的func函数
func in class C
func in class C
func in class C
二
1、 编写程序, 以下面给出的 container 类作为基类, 建立 2 个直接派生类 cube
和 sphere, 分别用来表示正方体和球体, 要求, 每一个派生类中都要包含基类
container 中的两个纯虚函数, 用来计算正方体和球体的表面积和体积。
class container {
protected:
double radius;
public:
container(double radius) :radius(radius) {};
virtual double surface_area() = 0;
virtual double volume() = 0;
};
写出主程序, 并计算边长为 6 的正方体的表面积和体积, 以及半径为 5 的球体
的表面积和体积。
提示: 正方体表面积计算公式: 边长边长6。
正方体体积计算方式: 边长边长边长。
球体表面积计算公式: 43.14半径半径;
球体体积计算公式: 4/33.14半径半径*半径;
#include <iostream> #include <iomanip> using namespace std; class container{ public: container(double radius):radius(radius){}; virtual double surface_area() = 0; virtual double volume() = 0; protected: double radius; }; //container::container(double radius): m_radius(radius){} class Cube:public container{ public: Cube(double radius):container(radius){};//构造函数,以基类中的radius变量为正方体的边长 double surface_area(); double volume(); }; double Cube::surface_area() { return 6 * radius * radius; } double Cube::volume() { return radius * radius * radius; } class Sphere:public container{ public: Sphere(double radius):container(radius){};//构造函数,以基类中的radius变量为正方体的边长 double surface_area(); double volume(); }; double Sphere::surface_area() { return 4 * 3.14 * radius * radius; } double Sphere::volume() { return 4/3 * 3.14 * radius * radius * radius; } int main() { container *cubes = new Cube(6); cout<<"6 cube surface_area() is : "<<cubes->surface_area()<<"volume is "<<cubes->volume()<<endl; container * spheres = new Sphere(5); cout<<"6 sphere surface_area() is : "<<spheres->surface_area()<<"volume is "<<spheres->volume()<<endl; return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。