类,对象,面向对象
介绍
在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):将数据和操作数据的方法封装在一起,限制外部对内部数据的直接访问。通过访问修饰符(如
public、private、protected)来控制访问权限。
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使得代码更易于管理、扩展和重用。这种编程范式在大型软件开发中尤为重要,因为它有助于组织复杂的代码结构。
已经有了面向过程,为什么要面向对象?
- 面向对象和面向过程是一个相对的概念。
- 面向过程是按照计算机的工作逻辑来编码的方式,最典型的面向过程的语言就
是 c 语言了,c 语言直接对应汇编,汇编又对应电路。
- 面向对象则是按照人类的思维来编码的一种方式,C++就完全支持面向对象功
能,可以按照人类的思维来处理问题。
- 举个例子,要把大象装冰箱,按照人类的思路自然是分三步,打开冰箱,将大
象装进去,关上冰箱。要实现这三步,我们就要首先有人,冰箱这两个对象。人有给冰箱发指令的能力,冰箱有能够接受指令并打开或关闭门的能力。
但是从计算机的角度讲,计算机只能定义一个叫做人和冰箱的结构体。人有手
这个部位,冰箱有门这个部位。然后从天而降一个函数,是这个函数让手打开了冰
箱,又是另一个函数让大象进去,再是另一个函数让冰箱门关上。
从开发者的角度讲,面向对象显然更利于程序设计。用面向过程的开发方式,
程序一旦大了,各种从天而降的函数会非常繁琐,一些用纯 c 写的大型程序,实际
上也是模拟了面向对象的方式。
那么,如何用面向过程的 c 语言模拟出面向对象的能力呢?类就诞生了,在类
中可以定义专属于类的函数,让类有了自己的动作。回到那个例子,人的类有了让
冰箱开门的能力,冰箱有了让人打开的能力,不再需要天降神秘力量了。
总结:到现在,大家应该可以理解类的重要性了吧,这是面向对象的基石,
也可以说是所有现代程序的基石。
面向对象的三大特征
视频讲解:
https://www.bilibili.com/video/BV1c1421R71L?spm_id_from=333.788.videopod.sections&vd_source=cb02f779bd17a3aad9801e0c4464dfc9