为了账号安全,请及时绑定邮箱和手机立即绑定

面试必备:面向对象编程轻松讲解

这是一种利用对象来解决现实生活中的问题的编程方式。

遵循 OOPS 模式的语言

C++, Java, Python, JavaScript, Ruby, Swift, Objective-C, C#

OOPS 概念:
  • 它也称为对象的蓝图
  • 它是一种用户自定义的数据结构,用于创建类的实例。它由数据成员成员函数组成。
  • (注:类本身不占用内存。它们仅仅是一个用来创建对象的模板)

图片如下

物品
  • 它是类的一个实例对象。
  • 对象是按照类的蓝图创建的。

图片

特色
抽象化
  • 这向用户展示重要信息,而隐藏内部细节。
  • 它指的是只对外提供必要的信息,隐藏背景细节和实现细节。
  • 抽象化就是简化接口,使外部只需要关注必要的信息。

。我们知道手机的一些重要特性,比如电池、SIM卡(SIM卡)、屏幕设计和操作系统(OS)。但我们可能不太了解它的内部运作,比如内存是如何分配的等内部技术细节。

封装概念
  • 这是一个原则,即所有的关键信息都包含在对象内部。
  • 封装通过将对象的数据成员设为私有来保护对象的内部状态。封装隐藏了类的内部实现细节,使外部代码无法访问。
  • 封装关注的是通过限制对内部状态的访问来确保数据安全完整性
遗产

在OOPS中,类可以继承其他类的属性和特征。

继承的类型

单一继承性: 子类直接继承自基类

图片描述:此处应填入图片的具体描述

多个父类的继承:
子类可以从多个父类继承特性。

如图所示: 图片描述

多层继承:
一个子类继承了一个由另一个基类派生的类。

图片描述 这是一张图片。

层次继承:
多个子类从一个基类继承。

图片说明

混合继承方式:
由上述提到的多种继承类型组成的继承方式。

这是一张关于...的图片,看起来挺有趣的。

多态

你知道什么是多态吗?

这意味着有很多形式。

编译时多态性(方法的重载):

这通常发生在同一个类中,有多个同名方法但参数不一样的情况。

    class Example {
    public:
        void display(int i) {
            std::cout << "整数: " << i << std::endl;
        }
        void display(double d) {
            std::cout << "浮点数: " << d << std::endl;
        }
    };

全屏 退出全屏

运行时多态(方法覆盖):
  • 这发生在子类提供了已经在其基类中定义的方法的具体实现方式。
  • 这通常通过C++中的虚函数来达成。
    class Base {
    public:
        virtual void show() {
            std::cout << "这是基类" << std::endl;
        }
        // 这是一个基础类
    };

    class Derived : public Base {
    public:
        void show() override {
            std::cout << "这是派生类" << std::endl;
        }
        // 这是一个派生类,它重写了基础类的show函数
    };

切换到全屏: 退出全屏,

动态绑定(动态调用)

这是在运行时决定执行的方法或函数,而不是在编译期间决定。

动态类型

这指的是编程语言能运行时确定变量类型,而非编译时。

动态加载内容(即网页加载时内容的动态更新)

动态加载就是一种机制,程序在需要的时候才把库或者模块加载到内存里。这样可以减少内存使用并提高性能,因为它只加载必要的部分。

抽象基类

在 C++ 中,抽象类是指不能被单独实例化的类,并且设计用于被其他类继承。例如,它至少有一个纯虚成员函数。

#include <iostream>

// 形状类
class Shape {
public:
    // 纯虚函数
    virtual void draw() const = 0;

    // 设置颜色
    void setColor(const std::string& color) {
        this->color = color;
    }

protected:
    std::string color;
};

// 派生类
class Circle : public Shape {
public:
    void draw() const override {
        std::cout << "画一个颜色为 " << color << " 的圆形" << std::endl;
    }
};

int main() {
    // 不能直接实例化形状类
    Circle c;
    // 创建一个圆形对象并设置颜色为红色
    c.setColor("red");
    // 画出圆并输出颜色信息
    c.draw();
    return 0;
}

进入全屏 退出全屏

界面:

C++ 中的接口实际上是一个抽象基类,仅仅包含纯虚函数。

#include <iostream>

// 接口
class Drawable {
public:
    // 纯虚成员函数
    virtual void draw() const = 0;
};

// 另一个可着色接口
class Colorable {
public:
    // 纯虚成员函数
    virtual void setColor(const std::string& color) = 0;
};

// 实现了多个接口
class Square : public Drawable, public Colorable {
public:
    void draw() const override {
        std::cout << "绘制一个颜色为" << color << "的正方形" << std::endl;
    }

    void setColor(const std::string& color) override {
        this->squareColor = color;
    }

private:
    std::string squareColor;
};

int main() {
    Square s;
    s.setColor("蓝");
    s.draw();
    return 0;
}

按F11键可以进入或退出全屏模式

结构体 vs 类型(数据结构的两种形式)

默认访问权限:
结构体:结构体的成员默认是公开的。
类:类的成员默认是私有的。

它适用于简单的数据结构,其中数据封装不是主要考虑因素,
它用于更复杂的对象,一般需要封装、数据私有化以及成员方法。

构造

这是一个特殊的类成员函数,当创建该类的对象时会自动调用它,用于初始化该对象。

    #include <iostream>

    class MyClass {
    public:
        // 构造函数调用。值: 
        MyClass(int value) : value(value) {
            std::cout << "构造函数调用。值: " << value << std::endl;
        }

        // 析构函数
        ~MyClass() {
            std::cout << "析构函数调用。释放资源,完成清理。" << std::endl;
        }

        // 显示值的函数
        void display() const {
            std::cout << "值: " << value << std::endl;
        }

    private:
        int value;
    };

    int main() {
        // 创建一个MyClass的对象
        MyClass obj(10);
        obj.display();

        // 析构函数会在'obj'不再使用时自动调用
        return 0;
    }

全屏进入 全屏退出

终结者

这是一个类的特殊成员函数,当该类的对象被删除时会自动调用。它清理对象在其存在期间可能占用的资源。(提示:不能在C++中重载析构函数这一点)

记得保持联系哦!
如果你喜欢这篇内容,记得关注我的社交媒体,获取更多更新和见解哦:

推特: tuītè: https://x.com/MadhavGanesan
照片墙: zhàopiànqiáng: https://www.instagram.com/madhavganesan
领英: língyīng: https://www.linkedin.com/in/madhav-ganesan-19b0a5253

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消