问题及代码:
/*
*copyright (t) 2016,烟台大学计算机学院
*All rights reserved.
*文件名称:test.cpp
*作者:张晴晴
*完成日期:2016年6月2日
*版本号:v1.0
*问题描述:阅读程序。
*输入描述:
*程序输出:
*/
#include<iostream>
using namespace std;
class A
{
int a;//如果没说明是什么类型的,就默认为私有的
public:
A():a(5){}
virtual void print()const { cout<<a;}
};
class B: public A
{
char b;
public:
B() { b='E'; }
void print() const { cout<<b; }
};
void show(A &x)
{
x.print();
}
int main()
{
A d1,*p;
B d2;
p=&d2;//基类类型的指针可以指向派生类
d1.print();//输出对象d1的值,通过默认构造函数可知是5
d2.print();//输出对象d2的值,通过默认构造函数可知是E
p->print();//p指向的是派生类的d2,输出d2的值
show(d1);//输出d1
show(d2);//输出d2
return 0;
}
//基类的指针指向派生类的对象,如果基类声明的不是虚函数就调用基类的
//如果基类中是虚函数,并且在派生类中实现,就调用派生类函数
运行结果:
学习心得:
解析写在代码里面。
如果基类声明的指针指向派生类声明的对象,如果基类声明的函数不是虚函数就调用基类的,
如果基类中是虚函数,并且可以在派生类中实现,就调用派生类函数。