c++里的面向对象,继承、多态和运算符重载

如果要搞懂C++里的面向对象这部分,继承、多态和运算符重载这三块知识绝对是绕不开的核心。先把这事儿给捋顺了,才算把握住了面向对象编程的灵魂。 拿继承来说,它的作用就像一把剪刀,把现有的类剪下一部分接口和实现,然后拼接到新类上去。咱们平时说的基类或者父类,和派生类或者子类,通常是用“:”号连在一起的。就好比是在写个家族谱系。比如说写这样一段代码:class 派生类名 : public 基类名 {}; 这里面的“public”是最常见的继承方式。用这种方式,子类对外公开父类的接口;protected继承呢,就是子类能访问但外部看不见,一般是用来给兄弟类共享数据用的;private继承的话,子类直接调用父类成员都不行,纯粹是给加一层安全锁用的。 除了单继承,C++还允许一个类同时继承多个父类。但这事儿得小心点,别搞太复杂了。写法大概是class <派生类名> : <继承方式1> <基类名1>, <继承方式2> <基类名2> { ... }; 一般情况下我们也不怎么用protected或者private去继承,毕竟太容易引起歧义。 接下来聊聊运算符和函数重载。这玩意儿的目的是让类型看起来更像自己本来的样子。比如说函数重载,你可以在一个作用域内多次声明同名函数,只要参数列表不一样就行。不过记住了,光靠返回值不同是没法区分重载的,编译器会因为这搞迷糊。 至于运算符重载,说白了就是把普通函数写成带operator关键字的样子。像Box operator+(const Box&, const Box&);这种写法。如果定义成非成员函数的话,调用的时候就必须把两个参数显式传进去。 到了多态这儿,就是让父类指针能指向任意子类的情况了。这种情况通常是在类之间形成层次结构的时候才会出现。所谓的虚函数就是用virtual关键字声明的那个,运行的时候才会决定到底调用哪个版本;纯虚函数是在声明最后加=0,逼着子类必须给出具体的实现。含有纯虚函数的类就是抽象类了,你没法直接实例化它,只能当接口用。如果硬是要创建抽象类的实例,那编译器肯定会报错,这就逼着你得去把所有纯虚函数都给实现了。