第六周学习的主要内容是虚函数和多态
1:看上去像多态
描述,程序填空产生指定输出
#include <iostream>
using namespace std;
class B {
private:
int nBVal;
public:
void Print()
{
cout << "nBVal="<< nBVal << endl; }
void Fun()
{
cout << "B::Fun" << endl; }
B ( int n ) {
nBVal = n;}
};
int main() {
B * pb; D * pd;
D d(4); d.Fun();
pb = new B(2); pd = new D(8);
pb -> Fun(); pd->Fun();
pb->Print (); pd->Print ();
pb = & d; pb->Fun();
pb->Print();
return 0;
}
输入
无
输出
D::Fun
B::Fun
D::Fun
nBVal=2
nBVal=24
nDVal=8
B::Fun
nBVal=12
代码理解
- 既然题干叫做看起来像多态,那么说明实际上不是多态呗。
从程序中可以看出,题目已经定义了类B,而main函数中还有一个类D,且B类指针可以接受D类对象的值,所以说明类D是类B的派生类。根据题干已知的程序和输出做比较,可以知道类D也有类B的构造函数,Print()和Fun()函数。分别按照输出分别写出这些函数即可。 - 文中我是一只在想怎么多了一个nBVal=24的出现,后来看答案就知道派生类初始化了基类的函数和变量。
代码
#include <iostream>
using namespace std;
class B {
private:
int nBVal;
public:
void Print()
{
cout << "nBVal="<< nBVal << endl; }
void Fun()
{
cout << "B::Fun" << endl; }
B ( int n ) {
nBVal = n;}
};
//答案部分
class D:public B {
private:
int nDval;
public:
D (int n):B(3*n){
nDval = n;}
void Fun(