关于纯虚函数

自古美人都是妖i 提交于 2019-12-24 14:05:57

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

#include "stdafx.h"
#include<iostream>   
using namespace std;

//1.一个类中可以声明一个或多个纯虚函数,只要有纯虚函数的类就是抽象类
//2.抽象类只能作为其他类的基类,不能用来建立对象,又称抽象基类
//3.如果派生类只是简单地继承了抽象类的纯虚函数,而没有重新定义基类的纯虚函数,则派生类也是一个抽象类

class A{ 
public:
 virtual void fun() = 0;          //纯虚函数
};

class B:public A{
public:
 void fun(){cout<<"实现纯虚函数的定义成功"<<endl;}  //重写基类纯虚函数
};

//只有派生类与基类的虚函数具有完全相同的函数名、返回类型以及参数表,才能实现虚函数的特性
class C:public A{
public:
 void fun(int i){cout << "fun(int i)并不是基类纯虚函数fun()的实现版本"<<endl;}
};
 

//PS:以下两种声名没有区别
int *i,j = NULL;
int* p,q = NULL;
 

int _tmain(int argc, _TCHAR* argv[])
{
cout << i << endl;
cout << j << endl;
cout << p << endl;
cout << q << endl;
 

 //A a;              //错误:A是抽象类,不能建立对象
   B b;
 //C c;              //错误:C并没有实现基类的纯虚函数,所以C仍是抽象类,不能建立对象
 

 A *p1 = NULL;
 A *p2 = NULL;

 p1 = &b;
 p2 = new B;
 

//p1.fun();           //错误:left of '.fun' must have class/struct/union
//p2.fun();           //错误:left of '.fun' must have class/struct/union
 p1->fun();
 p2->fun();
 

  A &a = b;
 a.fun();
//a->fun();           //错误:type 'A' does not have an overloaded member 'operator ->'
                           //错误: '->A::fun' : left operand has 'class' type, use '.’

 cin.get();
 return 0;
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!