/*
* duotai.cpp
*
* Created on: 2021年7月18日
* Author: tom
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <unistd.h>
using namespace std;
class c1 //基类
{
public :
virtual void prin() //类里面的虚函数;
{cout<<"c1::print"<<endl;}
};
class c2:public c1
{ public:
virtual void prin() //这里可以不加virtual 但系统会提示。
{cout<<"c2::print"<<endl;}
};
class c3:public c2
{ public:
virtual void prin()
{cout<<"c3::print"<<endl;}
};
void func(c1 *pr)
{
pr->prin();
}
int main()
{
c1 c11;
c2 c22;
c3 c33;
func(&c11);
func(&c22);
func(&c33);
c1 *pr[10]; //建立一个指针数组,指向类型为c1 类。也就是基类。
//下面是赋值过程。
pr[0]=new c2; //经过测试,这里加和不加() 都可以。
pr[1]=new c3; //经过测试,这里加和不加() 都可以。
pr[2]=new c1(); //经过测试,这里加和不加() 都可以。
cout<<"in array:"<<endl;
for (int i=0;i<3;i++)
{
pr[i]->prin();
}
return 0;
}
输出:
c1::print
c2::print
c3::print
in array:
c2::print
c3::print
c1::print
如果把类c1中的virtual 关键字去掉, 所有行的输出都是
c1::print