C++学习和归纳剖析.docx

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象技术基础 1.构造函数和析构函数和特殊成员 构造函数的作用:PS:构造函数可以在类外定义 1.给对象一个标识符 2.为对象数据成员开辟内存空间 3.完成对象数据成员的初始化 4.如果没有显示定义构造函数,则默认构造函数只完成1、2两步 5.初始化表达式: 1.可用于初始化类的任意数据成员,static数据成员除外(在类外初始化) 2. 只能用初始化表初始化基类,const数据成员,引用成员,类对象成员 3. Const数据成员,只能在初始化表中初始化,必须显示的定义构造函数,而且要注意类中const整型数据成员不能作为常量指明一个数组的大小(运行才确定) 构造函数允许按参数默认方式调用(带有多个默认值得构造函数) class A { private: int x; int y; public: A(int xyp = 0){ x = xyp; y = xyp; cout 一个默认值的构造函数被执行 endl; } A(int xp=0 , int yp=0){ x = xp; y = yp; cout 两个默认值的构造函数被执行 endl; } }; int main(){ A a1(1); A a2(1,2); return 0; } 复制构造函数: 1.原型:Point::Point(const Point pt); 2.调用:Point pt2 = pt1; 或者 Point pt2(pt1); 3.默认复制构造函数:将源对象中的成员按“内存 单元复制”的方式复制到目的对象中,复制后,源对象和目的对象除了地址不同外,各个成员的取值都是相同的,特别是对于含有指针类型的数据成员,指向的内存单元相同 4.显示定义复制构造函数: 1. 类中含有指针型的数据成员,需要使用动态内存的,需要显示定义 2. 自定义复制构造函数,也可以使用初始化表来给目的对象赋值 构造函数注意点: 1.如果类中有类对象成员,那么该对象所在的类中必须定义了无参构造函数或所有参数都有默认值的构造函数,或默认构造函数,否则不合法(对象成员所占内存空间无法开辟,编译器报错) 2.只要自定义了构造函数(包括复制构造函数),则编译器不会提供默认构造函数 Static数据成员和static成员函数 1.static 数据成员在编译的时候就被创建,此时仅知道如何分配内存,但是必须在类外(cpp文件中)进行初始化 2.类定义:Class computer{ private: static float total_price; } 3.在cpp文件中初始化(不能再使用static关键字):float computer::total_price = 0; 4.静态成员函数只能调用静态成员变量,但是可以在函数中创建一个本类对象(当构造函数定义为private类型后),也可以delete 一个本类对象(析构为private型) 5.如果静态数据成员使用const修饰,而且是整型,浮点类型、布尔类型或枚举型,但不能是类对象,数组、引用和指针,C++允许该成员在类定义中初始化,此时不能再外部再次对该静态成员进行定义性声明,但可以对该成员进行引用性声明 6.定义性声明:指在一个文件中定义一个全局变量,如 int a; 7.引用性声明:指当该文件需要使用另一个文件的某个变量时,则需要使用引用性声明这个是另一个文件中的全局变量:external int a; 使用new和delete为对象数组分配释放动态空间: 1. Point * p = new point[2]; 申请了一块内存,连续存放连个point对象,此时不能显示调用对象的构造函数,因此,对象要么没有定义任何形式的构造函数(编译器提供),要么显示定义了一个(有且只能有一个:否则无法判断调用哪个构造函数)所有参数都有默认值的构造函数(包括无参构造函数)。PS: 只能使用p[0]来访问对象,如果使用p-print();p++; 来访问则delete[] p; p = NULL; 操作会出错 2. delete[] p; 释放了数组所占的内存空间,new和delete激活了数组中每个对象的构造函数和析构函数 3. malloc和free不能为对象动态的申请内存,因为无法像new/delete或new/deltete[]那样自动调用对象的构造函数和析构函数 4. delete p;操作后p指针不会被销毁,而且指向原来的地方,应及时的置NULL Const 对象和Const成员函数 1.const 成员函数无法修改数据成员,否则编译器报错 2.定义:void print( ) const { 函数体内不能修改数据成员

文档评论(0)

***** + 关注
实名认证
内容提供者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档