「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战」
前言
前面都是比较简单的基础知识,今天来探究一下面对对象的高级思想
C++中的类就是用于指定对象的形式,类中包含了对数据表示用法和用于处理数据的方法。类中的数据和方法称为类的成员。函数和数据在类中被称为类的成员。
面对对象
C++ 与C语言最大的核心特征可以就是这个对象了,通常面对对象有三大特性:C++的面向对象3个特性:1.封装。2.继承。3.多态。今天就讲讲面对对象的特性,先理解概念再来理解代码。
封装
封装就是数据和代码绑定在一起,避免其他代码的修改和不确定性访问。封装可以使得代码模块化,与函数的封装意义差不多,但是面对对象是一个相对宏观上的封装,对现实对象进行联系,根据现实事物进行封装,通常会封装的功能会非常多,功能复杂,函数的封装仅仅是对实现单一功能的功能的封装
来简单看下C++中基础的类的定义:
class Cat
{
public:
string color;
};
继承
封装只是面对对象的基础功能,继承才开始进入面对对象的真的厉害的地方,继承是一种类型对象得到另一个类型对象的属性和方法。用于扩展已存在的代码,就像生物的分类,猫和属于一个动物,定义一个动物的基类和一个猫类继承动物类,一个最简单的继承的例子,猫类中使用基类定义的数据类型:
#include <iostream>
using namespace std;
int main()
{
class Animal
{
public:
string name;
};
class Cat : public Animal
{
public:
string name;
};
Cat c;
c.name = "老菜鸟";
cout << c.name << endl;
}
多态
多态相对于继承就比较难理解了,我们只解释最简单的,先看代码:
#include <iostream>
using namespace std;
class Animal
{
public:
virtual void whoami() {
cout << "i am animal father" << endl;
}
};
class Cat : public Animal
{
public:
void whoami() {
cout << "i am cat son" << endl;
}
};
int main()
{
Animal *a = new Cat();
a->whoami();
}
先用基类实例化了一个子类实例化了一个,a,在这里,a虽然是指向Animal的指针,但是被调用的函数却是子类的的!,子类会覆盖父类的方法,实现这个多态的现象主要是因为基类使用了
virtual,让基类的方法成为了虚函数,所以可以让继承他的子类进行覆盖重写。但是没有继承肯定是不能进行重写的,这违背了面对对象的初衷
总结
今天又了解了一下C++中的面对对象,基本上除了函数式编程都能看到这个知识,面对对象非常有用非常重要,今天了解的东西可能是C++中面对对象基础知识中的一点点,要继续理解中的奥秘还是需要大量练习,继续努力~