类,对象,面向对象

介绍

在C++中,类、对象和面向对象编程(OOP)是核心概念。下面是对这些概念的详细讲解:

类(Class)

类是C++中的一个用户定义的数据类型,它是对象的蓝图或模板。类定义了对象的属性(成员变量)和行为(成员函数)。通过类,可以将数据和操作这些数据的函数封装在一起。

class Dog {  
public:  
    // 成员变量
    std::string name;  
    int age;  

    // 成员函数  
    void bark() {  
        std::cout << name << " says Woof!" << std::endl;  
    }  
};

对象(Object)

对象是类的实例。通过类定义的模板,可以创建多个对象,每个对象都有自己的属性值。对象是实际使用类时的具体实体。

int main() {  
    Dog myDog; // 创建一个Dog类的对象  
    myDog.name = "Buddy"; // 设置对象的属性  
    myDog.age = 3;  
    myDog.bark(); // 调用对象的方法  
    return 0;  
}

面向对象编程(OOP)

面向对象编程是一种编程范式,它使用“对象”来设计程序。OOP的主要特性包括:

  • 封装(Encapsulation):将数据和操作数据的方法封装在一起,限制外部对内部数据的直接访问。通过访问修饰符(如publicprivateprotected)来控制访问权限。
class BankAccount {  
private:  
    double balance;  // 私有成员,外部无法直接访问  

public:  
    void deposit(double amount) {  
        if (amount > 0) {  
            balance += amount;  
        }  
    }  

    bool withdraw(double amount) {  
        if (amount > 0 && amount <= balance) {  
            balance -= amount;  
            return true;  
        }  
        return false;  
    }  
};
  • 继承(Inheritance):允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码重用和扩展。
class Animal {  
public:  
    void eat() {  
        std::cout << "Eating..." << std::endl;  
    }  
};  

class Dog : public Animal { // Dog类继承自Animal类  
public:  
    void bark() {  
        std::cout << "Woof!" << std::endl;  
    }  
};

多态(Polymorphism):允许不同类的对象以相同的方式调用同一方法,具体的实现由对象的实际类型决定。多态可以通过函数重载和虚函数实现。

class Animal {  
public:  
    virtual void sound() { // 虚函数  
        std::cout << "Some sound" << std::endl;  
    }  
};  

class Dog : public Animal {  
public:  
    void sound() override { // 重写虚函数  
        std::cout << "Woof!" << std::endl;  
    }  
};  

void makeSound(Animal* animal) {  
    animal->sound(); // 多态  
}

C++中的类和对象是实现面向对象编程的基础。通过封装、继承和多态,OOP使得代码更易于管理、扩展和重用。这种编程范式在大型软件开发中尤为重要,因为它有助于组织复杂的代码结构。

已经有了面向过程,为什么要面向对象?

  1. 面向对象和面向过程是一个相对的概念。
  2. 面向过程是按照计算机的工作逻辑来编码的方式,最典型的面向过程的语言就

是 c 语言了,c 语言直接对应汇编,汇编又对应电路。

  1. 面向对象则是按照人类的思维来编码的一种方式,C++就完全支持面向对象功

能,可以按照人类的思维来处理问题。

  1. 举个例子,要把大象装冰箱,按照人类的思路自然是分三步,打开冰箱,将大

象装进去,关上冰箱。要实现这三步,我们就要首先有人,冰箱这两个对象。人有给冰箱发指令的能力,冰箱有能够接受指令并打开或关闭门的能力。

但是从计算机的角度讲,计算机只能定义一个叫做人和冰箱的结构体。人有手

这个部位,冰箱有门这个部位。然后从天而降一个函数,是这个函数让手打开了冰

箱,又是另一个函数让大象进去,再是另一个函数让冰箱门关上。

从开发者的角度讲,面向对象显然更利于程序设计。用面向过程的开发方式,

程序一旦大了,各种从天而降的函数会非常繁琐,一些用纯 c 写的大型程序,实际

上也是模拟了面向对象的方式。

那么,如何用面向过程的 c 语言模拟出面向对象的能力呢?类就诞生了,在类

中可以定义专属于类的函数,让类有了自己的动作。回到那个例子,人的类有了让

冰箱开门的能力,冰箱有了让人打开的能力,不再需要天降神秘力量了。

总结:到现在,大家应该可以理解类的重要性了吧,这是面向对象的基石,

也可以说是所有现代程序的基石。

面向对象的三大特征

视频讲解:

https://www.bilibili.com/video/BV1c1421R71L?spm_id_from=333.788.videopod.sections&vd_source=cb02f779bd17a3aad9801e0c4464dfc9