C++面向对象的编程
C++面向对象的编程
目录
- 对C++面向对象编程的理解
- 声明和定义类
声明和定义
构造函数
析构函数
静态成员和静态变量
- 类实例化对象
- 对象的浅复制和深复制
- 继承
单继承
多继承
- 虚函数
- 类模板
- 其他
- C++的优势和不足
- C++的运用
对C++面向对象编程的理解
C++程序语言是一种面向对象的编程语言,与其他常见的面向对象语言,如:Java、Objective C不同,C++支持多重继承,因此如果在编写大型的PC端应用程序或者游戏时是非常合适的,因为其可以在声明类时可以从很多的父类中继承出来,分门别类,减少了重新写一些冗余的属性和功能从而提高程序开发的效率,因此其也要求程序员要非常熟悉应用产品的前提下,才能开发出高效率(开发效率)的应用程序
类的声明和定义
声明和定义
类声明的关键字:class
class 类名{
访问权限说明符
构造函数;
析构函数;
成员变量;
成员函数;
};
访问权限说明符:public、protected、private(默认)
声明和定义成员变量、成员函数,特点:实例化对象才能使用
声明和定义静态变量、静态函数,关键字:static,特点:在类状态下就能进行使用
构造函数:与类同名的函数,没有返回类型,常常用于对象的初始化赋值;构造函数可以由函数参数个数的不同,参数类型的不同而形成不同的构造函数;
析构函数:在释放对象时进行调用,可用于在释放对象时进行一些有价值的数据保存;书写格式:“~与类同名的函数”;对象的释放时间:在对象的作用范围之后;
类实例化对象
类名 对象名(构造函数函数参数列表);
访问类对象的属性和方法:使用点语法“ . ”,对象名.属性/方法;
类指针对象的声明和定义:类名 *对象指针名 = &对象名/new 构造函数 属性和方法的访问符:“->”,例如:this->xxx;
对象的浅复制和深复制
浅复制
忽略了对类对象中指针这种数据类型成员的处理,指针对象直接复制,最后复制出来的指针对象所指向的数据跟原来的指针对象指向的数据是一样的
深复制
给复制出来的指针对象所指向的数据赋予新的存储空间,把新存储空间的首地址赋值给拷贝出来的对象,这就不会出现当一个对象被delete时会出现另一个对象在访问指针对象指向的数据时的运行时错误,可以使用new、malloc()等等重新分配内存的函数进行深复制
拷贝构造函数
与类同名,没有返回值,函数参数为一个类对象的常引用
书写格式:类名(const 类名 &引用名){ }
调用时期
一个对象以值传递的方式传入函数体
一个对象以值传递的方式从函数返回
一个对象需要通过另外一个对象进行初始化
重写拷贝构造函数
继承
继承关键字:“ : ”冒号
继承:public(公有)、protected(保护)、private(私有)
public:公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问
protected:私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问
private:保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的
单继承
派生类只有一个父类,格式:class 派生类类名:public\protected\private 父类名{ };
多继承
派生类有多个父类,格式:class 派生类类名 : 访问权限说明符 父类名,访问权限说明符 父类名{ };
多继承注意问题
基类的构造函数与按照派生类列表中出现的次序调用,析构函数的调用次序总是和构造函数的调用次序相反
多重继承的情况下,遇到二义性的可能将会更大,编译器不会试图根据派生类转换区别基类间的转换,转换成每个基类都一样好,避免二义性的最好方法就是指定函数的作用域
虚函数
类模板