- 4
- 0
- 约1.02万字
- 约 97页
- 2017-01-01 发布于河南
- 举报
Ch.8 类的深入剖析-2
第十讲 类的深入剖析(II) const 对象 标志:关键字 const 目的:声明对象不能被修改 如果修改对象会产生编译错误 const 成员函数 const 对象只能调用 const 成员函数 const 成员函数不能修改对象 const 成员函数的声明和定义都需要用 const 修饰 构造函数和析构函数不能声明为 const 问题: 前面的例子中,类的私有成员均为 非const 类型,因此可以正常地调用构造函数进行初始化 如果该私有成员为 const 类型,则要求定义时就赋值,显然在类定义中直接赋值是错误的,而又不能像非const类型成员那样通过构造函数赋值,那该怎么办呢? Member initializer (成员初始化器) 需要进行初始化 const 数据成员 为引用类型的数据成员 可以用于任何数据成员 Member initializer list 出现在构造函数参数列表后,函数体左花括号前 用冒号 (:) 与参数列表相分隔 数据成员名后跟括号,括号内包含初始值 多个数据成员用逗号分隔 初始化在构造函数执行前执行 Composition (组合)(对象作为类的成员) 是一种 has-a 关系 一个类可以将其他类的对象作为成员 Example AlarmClock 对象将 Time 对象作为成员 初始化成员对象 成员初始化器从对象的构造函数向成员对象的构造函数传递参数 成员对象按照它们在类定义中出现的顺序进行构造,而不是按照在初始化列表中出现的顺序 在宿主对象构造之前进行构造 如果不提供初始化器 成员对象的默认构造函数被隐式调用 类的友元函数 在类的作用域外定义,不是类的成员函数 具有访问该类非 public 成员的权力 单独的函数或整个类均可声明为其他类的友元 可以提高性能 适用于成员函数无法完成某些操作时 声明一个函数为另一个类的友元 在类定义中提供函数原型并在前面加上关键字 friend 声明一个类为另一个类的友元 如:在ClassOne的定义中放置如下声明 friend class ClassTwo;ClassTwo 的所有成员函数成为 ClassOne 的友元。 允许ClassTwo访问ClassOne的成员变量,就如同ClassOne自己的函数一样。 友元需要被授予,而不是索取 class B 要想成为 class A 的友元,class A 必须显式同意,即声明 class B 为它的友元 或者说如果Class A同意Class B的成员访问自己的成员变量就要主动声明Class B是自己的友元 友元关系不是对称的,并且不能传递 class A 是 class B 的友元,且 class B 又是 class C 的友元,不能认为 B 是 A 的友元、C 是 B 的友元或 A 是 C 的友元 成员函数知道在处理哪个对象的数据成员 每个对象可以通过一个称为 this 的指针来访问它自己的地址 对象的 this 指针不是对象的一部分 this 被编译器作为隐式参数传递给对象的非静态成员函数 对象可以隐式或显式地使用 this 指针 当直接访问数据成员时隐式使用 当使用关键字 this 时显式使用 this 指针的类型依赖于对象的类型和成员函数是否被声明为 const 级联成员函数调用 在同一条语句上进行多个函数调用 要求成员函数返回解引用(dereferenced )的this指针时才能使用 例如: t.setMinute( 30 ).setSecond( 22 ); 调用 t.setMinute( 30 ); 然后调用 t.setSecond( 22 ); 问题的来源 数组等数据结构在定义时需要明确大小,短了不能完整存放数据,长了浪费,是否有一种可变长的方法来处理这些结构? C++内存格局 全局数据区(data area) 代码区(code area) 栈区(stack area) 堆区(heap area) 全局变量、静态数据、常量存放在全局数据区; 所有类成员函数和非成员函数代码存放在代码区; 为运行函数而分配的局部变量、函数参数、返回数据、返回地址等存放在栈区; 其余的空间都被称为堆区。(动态内存管理只能是堆区) 堆内存的分配与释放 堆内存的分配与释放 new 类型名T(初值列表) 功能:在程序执行期间,申请用于存放T类型对象的内存空间,并依据初值列表调用合适的构造函数。 结果值:成功:T类型的指针,指向新分配的内存。 失败:0(NULL) new 运算符可以用来动态分配数组 int *gradesArray = new int[ 10 ]; int *gradesArray = new int[ m ]; 因为是动态产生,因此m可以在该句执行之
您可能关注的文档
最近下载
- 制造业信息化战略规划实施与优化-PDM.docx VIP
- 那智不二越机器人flexgui toolbox操作说明书.pdf VIP
- 智慧工厂-智慧工厂解决方案.docx VIP
- 高中化学解题方法归纳:和量法.doc VIP
- 译林牛津新版高中英语(必修1-3)单词表.pdf VIP
- 包装有限公司分切机安全风险分级清单.docx VIP
- 重庆市西南大学附属中学2025届高三下学期二诊模拟考试物理试卷 含解析.docx VIP
- 【高中英语】《星火英语同步词汇》抗遗忘速记手册.docx VIP
- 成都市锦江区2026届初三一诊(暨期末考试)数学试卷(含答案).docx
- 三坐标 培训教程.pptx VIP
原创力文档

文档评论(0)