上一篇文章讲解了多态、虚函数、纯虚函数。这一篇文章来讲讲C++的数据抽象、封装、接口。
C++数据抽象
只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。是一种依赖于接口和实现分离的编程(设计)技术。
比喻:一台计算器,你要计算两个数字相加,你只需要向计算机输入两个数字,然后返回两个数字的和。而至于两个数字如何相加的,你完美不用关心,只关心最后你要的关键信息。
例程:
class Adder {
public:
void addNum(int number)
{
total += number;
}
int getTotal()
{
return total;
};
private:
int total;
};
int main()
{
Adder a;
a.addNum(10);
a.addNum(20);
cout << "Total " << a.getTotal() << endl;
return 0;
}
注意:
1.类的内部受到保护,不会因无意的用户级错误导致对象状态受损。
2.类实现可能随着时间的推移而发生变化,以便应对不断变化的需求,或者应对那些要求不改变用户级代码的错误报告。
C++封装
把数据和操作数据的函数绑定在一起,这样能避免受到外界的干扰和误用,即数据隐藏。面向对象理念是万物皆对象,都有其特征和行为,我们把“成员变量”理解为特征,把“成员函数”理解为行为。被封装的特性只能通过特定的行为去访问。
比喻:一个计算器,你只能看到他的外观,但是你没法看到内部的电路板等,它被封装到外壳内部,如果不进行封装,那么电路板就会裸露在外面,那么电路板就会因为外部环境,比如潮湿天气等,使其氧化受损。
例程:
class Box
{
public:
double getVolume(void)
{
return length * breadth * height;
}
private:
double length;
double breadth;
double height;
};
C++接口(抽象类)
接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。
比喻:描述猪有白猪,黑猪,山猪等,则猪就这些的抽象,所有猪的共同特征有毛,牙齿,尾巴等,而这些就是接口。而具体毛的颜色,尾巴是怎么样是猪的类型决定,所以由各自实现,也就是由子类来实现。
例程:
class Shape {
protected:
int width, height;
public:
Shape(int a = 0, int b = 0)
{
width = a;
height = b;
}
virtual int area() = 0;
};
class Rectangle : public Shape {
public:
Rectangle(int a = 0, int b = 0) :Shape(a, b) { }
int area()
{
cout << "Rectangle class area :" << endl;
return (width * height);
}
};
int main()
{
Shape *shape;
Rectangle rec(10, 7);
shape = &rec;
shape->area();
return 0;
}
注意:
1.抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误
2.如果没有在派生类中重写纯虚函数,就尝试实例化该类的对象,会导致编译错误。
3.可用于实例化对象的类被称为具体类
总结:
通过三篇文章总结C++面向对象的一些概念,以及注意事项。那么C++有什么作用?其实C++可以通过Qt做UI软件,Linux的应用开发,服务器等。后续继续更新C++的高级功能部分。
本文分享自 Rice 嵌入式开发技术分享 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!