关于纯虚函数

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值