您的位置:首页 > 编程语言 > C语言/C++

C++学习基础十二——纯虚函数与抽象类

2016-09-27 23:19 218 查看
一、C++中纯虚函数与抽象类:

1、含有一个或多个纯虚函数的类成为抽象类,注意此处是纯虚函数,而不是虚函数。

2、如果一个子类继承抽象类,则必须实现父类中的纯虚函数,否则该类也为抽象类。

3、如果一个类中含有虚函数,则必须将该类的析构函数声明为虚函数。

4、虚函数与纯虚函数的声明:

virtual void draw();//虚函数

virtual void draw() = 0;//纯虚函数

5、C++中支持两种多态性:

编译时多态:通过重载函数实现。

运行时多态:通过虚函数实现。

二、Java抽象函数与抽象类:

1、含有抽象方法的类成为抽象类,但抽象类不一定含有抽象方法。抽象类不能创建实例。

2、抽象方法必须使用abstract关键字修饰。

3、如果非抽象子类继承抽象类,则必须重写父类中所有的抽象方法。

三、C++接口:一个类中除了构造函数和析构函数外,只有纯虚函数,则该类成为接口 。

四、代码实现:

#include <iostream>

using namespace std;

//含有一个或多个纯虚函数的类成为抽象类,注意:此处指的是纯虚函数而不是虚函数
//纯虚函数的定义:virtual void draw() = 0;
//如果继承抽象类,则必须实现父类中所有的纯虚函数,否则该子类也为抽象类
//如果一个类中包含虚函数,则必须将本类的析构函数声明为虚函数。
class Shape
{
public:
Shape(){
}
virtual ~Shape(){
}
virtual double getArea() = 0;//纯虚函数
virtual double getP() = 0;
virtual void draw() = 0;
};

class Circle : public Shape
{
public:
Circle(double r):itsRadius(r){
}
virtual ~Circle(){

}
double getArea(){
return 3.14 * itsRadius * itsRadius;
}
double getP(){
return 2 * 3.14 * itsRadius;
}
void draw(){
cout<<"draw Circle..."<<endl;
}
private:
double itsRadius;
} ;

class Rectangle : public Shape
{
public:
Rectangle(int w,int h):wid(w),hei(h){
}
virtual    ~Rectangle(){
}
double getArea()
{
return wid * hei;
}
double getP()
{
return 2*(wid + hei);
}
void draw()
{
for(int i = 0;i < 5;i++)
{
for(int j = 0;j < 4;j++)
{
cout<<"X  ";
}
cout<<endl;
}
}
private:
int wid;
int hei;
};
int main()
{
int number;
bool flag = false;

Shape *shape;
while(flag == false)
{
cout<<"请输入数字:(1)圆形  (2)矩形  (0)退出:";
cin>>number;
switch(number)
{
case 1:
shape = new Circle(10.0);
break;
case 2:
shape = new Rectangle(13,15);
break;
case 0:
flag = true;
break;
}

if(flag == false)
{
shape->draw();
delete shape;
}
}
return 0;
}


后续更新中....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: