C++的魅力在于其丰富多彩的性格特征:其行为方式既可以像C一样面向过程也可以面向对象(专注Class 很多年)、封装性(城府很深)、继承性(富二代)、多态性(多重人格/精神分裂/变态),谜一样的男神,常年霸占编程语言“琅琊榜”前三甲(今年排行第一的高富帅是Java)。本篇将根据以下C++男神养成的大致攻略图所对应的性格特征进行简要的分析。
1.面向对象
面向对象的三大特性:封装、继承、多态。
类和对象:类由数据成员和成员函数构成,代表抽象派,玩的就是概念,某种意义上来说是一种行为艺术;而对象是具体的,比如说过年回家和老爹下中国象棋,发现棋盘上少了一对‘象’,那是你爸在告诉你该找“对象”了(单身狗表示选择Go Die)。
封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的类进行信息隐藏。(C++最大的优点:可以隐藏代码的实现细节,使得代码更模块化)
继承:可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展,但是基类的构造函数、复制构造函数、析构函数、赋值运算符不能被派生类继承。(优点是实可以扩展已存在的代码模块类)
多态:一个类实例的相同方法在不同情形有不同表现形式。多态实现的两种方式:将子类对象的指针赋给父类类型的指针或将一个基类的引用指向它的派生类实例。(其中比较重要的是虚函数的使用以及指针或引用)
this指针:一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类的内部,当在类的非静态(前面没加Static)成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,各成员的访问均通过this指针进行。(静态成员是没有this指针的)
2.封装性
(1)拷贝函数
² 浅拷贝:所谓浅拷贝,指的是在对象复制时,只是对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。
²