
面向对象编程是一种以对象(object)为中心的编程方法。其背后的思想是:对象不仅包含数据,也包含行为与操作。这种编程方法不仅使程序易于复用,还提升了软件的生产效率。面向对象编程主要使用的编程技巧有 3 种:继承、封装、多态。
面向对象的根本价值在于:可复用、可扩展、可维护。
// 没有使用类的时候
int a{};
int b{};
int c{};
void fna() {}
void fnb() {}
void fnc() {}
可以看到,如果你要去开发或者维护这个程序,这是非常耗费心神的。不说里面的具体逻辑,就算只是翻到对应的地方都很累。
由此,面向对象中的“类”诞生了。它可以把程序中相关的函数和变量汇集到一起,形成组件。
class Mya
{
public:
int a{};
void fna() {
// 处理过程
}
};
class Myb
{
public:
int b{};
void fnb() {
// 处理过程
}
};
还没有感觉出来吗?你可以把上面代码想象成一个超大类,下面代码就是从这个超大类中分出许许多多的小类,小类中只包含与自己相关的内容。
相信对“对象”都不陌生,它就是真实的实例。
#include <string>
// 这是类
class Dog
{
public:
std::string name{};
void fnDog() {
// 跑、叫
}
};
Dog dog;
dog.name = "旺财";
dog.fnDog();
面向对象编程通过对象之间的消息传递来驱动程序。
我们来看使用场景:
/* 获取玩家A的手势 */
auto a = GetHand();
/* 获取玩家B的手势 */
auto b = GetHand();
/* 判定胜负 */
auto winner = GetWinner(a, b);
// 获取玩家A的手势
auto a = PlayerA.GetHand();
// 获取玩家B的手势
auto b = PlayerB.GetHand();
// 由裁判判定胜负
auto winner = Judge.GetWinner(a, b);
它们的区别在于:
GetHand()GetWinner()GetHand()GetWinner()所以,使用 C++ 这类面向对象编程语言,可以通过调用对象的方法来驱动程序。这种函数调用方式,就是对象之间的“消息传递”。
类是对象的定义,而对象是类的实例。

我们定义好一个类后,还无法直接使用类中的成员,必须先生成该类的实例,这个实例就是对象。
class MyClass {
public:
int variable{};
void Function() {
// 使用对象所持有的函数
}
};
MyClass obj; // 创建对象
obj.variable = 123; // 使用对象所持有的变量
obj.Function(); // 使用对象所持有的函数