从零开始学习C++(二十.类和对象)

128 阅读2分钟

「这是我参与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;
}

image.png

多态

多态相对于继承就比较难理解了,我们只解释最简单的,先看代码:

#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();
}

image.png 先用基类实例化了一个子类实例化了一个,a,在这里,a虽然是指向Animal的指针,但是被调用的函数却是子类的的!,子类会覆盖父类的方法,实现这个多态的现象主要是因为基类使用了virtual,让基类的方法成为了虚函数,所以可以让继承他的子类进行覆盖重写。但是没有继承肯定是不能进行重写的,这违背了面对对象的初衷

总结

今天又了解了一下C++中的面对对象,基本上除了函数式编程都能看到这个知识,面对对象非常有用非常重要,今天了解的东西可能是C++中面对对象基础知识中的一点点,要继续理解中的奥秘还是需要大量练习,继续努力~