#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; }