【推荐】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;
}
来源:oschina
链接:https://my.oschina.net/u/1867627/blog/806145