c++中抽象类和接口
1. 抽象类
在面向对象编程中,抽象类是一种只能定义类型,不能生成对象的类,它是对一系列看上去不同,但是本质相同的具体概念的抽象。最典型的的抽象类就是”图形”,三角形、矩形、梯形都是图形,它们都具有边长、面积属性,”图形”类是对这系列的抽象。
程序设计中,我们可以定义一个表征图形的类,然后具体图形继承该类。图形类,即基类定义如下:
class Shape
{
public:
double area() //求面积
{
//如何求??
}
};
实际上,只要是具体图形就有面积这个量,但是对”图形”求面积是没有任何意义的,只有在知道具体的图形类型之后才能求面积。所以对”图形”来说,area()函数无法实现,且不可让Shape生成对象(生成对象无意义),这就需要把Shape定义成一个抽象类:把area()函数声明为纯虚函数即可:
virtual double area() = 0;
总结什么是抽象类:其实,在c++中并没有抽象类的概念,要实现抽象类则需要通过纯虚函数实现。纯虚函数指的是只定义函数原型的成员函数。在c++的类中,只要存在纯虚函数,那么该类就变成抽象类。
(1) 每个具体图形的求面积算法不一样,所以加上virtual关键字,表明该函数是虚函数,在子类中重写时可以发生多态;
(2) 为对Shape类求面积无意义,所以加上”= 0”表明该函数声明为纯虚函数,不需要定义函数体。
(3) 抽象类不能生成对象,只能用作父类被继承,子类必须实现纯虚函数的具体功能,在子类中,父类的纯虚函数被实现后就变成虚函数,当然,如果子类没有实现父类的纯虚函数,那么子类也是抽象类一个。
class shape
{
public:
//纯虚函数
virtual double area() = 0;
};
//定义圆形类
class circle : public shape
{
private:
int r;
public:
circle(int a) : r(a)
{}
double area()
{
return r * r * 3.14;
}
};
//定义矩形类
class rectangle : public shape
{
private:
int x;
int y;
public:
rectangle(int a, int b) : x(a), y(b)
{}
double area()
{
return x * y;
}
};
int main(void)
{
rectangle r(5, 6);
circle c(5);
printf("圆形面积为: %.2lf\n", c.area());
printf("矩形面积为: %.2lf\n", r.area());
return 0;
}
编译运行:
2. 接口
理解了什么是抽象类后(类中含有纯虚函数),理解什么是接口就简单了。c++中接口也是一种特殊的类,需要满足:
(1) 类中没有定义任何成员变量
(2) 类中所有成员函数都是公有且都是纯虚函数
举例:
class deviceOp
{
public:
virtual bool OpenDev() = 0;
virtual void CloseDev() = 0;
virtual bool WriteDev(const char* buf, int len) = 0;
virtual int ReadDev(char* buf, int len) = 0;
};
接口是一种特殊的抽象类,所以抽象类具有只能被继承不能创建对象的特征它也具备。
推荐阅读
-
c#中抽象类和接口的详细介绍
-
浅谈Java抽象类和接口的个人理解
-
php中抽象类跟接口的概念和区别
-
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
-
关于Kotlin中抽象类和接口的一点总结
-
Windows 8的出现是不是意味着,客户端用前端脚本语言,逻辑和后面的服务用C#,所以C++这种就会 慢慢消失在一般的开发过程中?
-
C++中delete和delete[]的区别 博客分类: c/c++
-
C++中delete和delete[]的区别 博客分类: c/c++
-
c++中抽象类和接口
-
定义两个接口,其中各包括一个抽象方法分别用来完成两个数的加法和减法操作,然后创建一个类KY6_3来实现这两个接口中的抽象方法。编写程序KY6_3.java,将源程序写在实验报告中。