第十二章:类和动态内存分配
来源:互联网 发布:单片机湿度传感器 编辑:程序博客网 时间:2024/06/04 18:37
静态变量的使用
- 类中的静态变量不属于任何对象,是共享变量
- 在类的方法实现的文件中初期化类的静态变量。
- 不能在类声明中初期化静态成员变量。
static int a = 0; //wrong
static const int a = 0; //right
- static const修饰的类成员可以进行初期化。因为const变量的初期化只执行一次。
int StringBad::num_strings = 0;
带参数的有默认值的构造函数可以作为默认构造函数。
复制构造函数:
- 声明和使用
className(const className &);
String(const String &);
String st1(st2);
String st1=st2;
String st1 = String(st2);
String *pst = new String(st1);
- 当按值传递和返回对象时,都会调用复制构造函数。
- 有时可选用传递参数的引用
如果类中包含了使用new初始化的指针成员,应当定义一个复制构造函数,实现深拷贝。
赋值运算符的重载:
- 定义和使用
String & String::operator=(const String &);
String st1;
String st2;
st1 = st2; - 赋值运算符只能由类成员函数重载
- 赋值操作并不产生一个新的对象。
C语言的空指针:宏NULL
C++的空指针:nullptr
静态类成员函数
- 静态类成员函数,函数前使用static修饰
- 不能通过对象调用静态类成员函数
- 如果静态类成员函数是公有的,使用类名::函数名调用
- 静态成员函数不能访问非静态数据成员
类的数据成员使用了new:
- 多个构造函数中使用new的格式都相同,因为只有一个析构函数。
如果构造函数中使用new,析构函数要使用delete - 应定义一个复制构造函数
- 应重载赋值运算符
有关返回对象的说明:
- 返回指向const对象的引用
- 返回对象将调用复制构造函数,返回引用不会
- 引用指向的对象应在调用函数执行时存在
- 返回指向非const对象的引用
- 重载<<必须返回非const ostream对象的引用,因为如果返回对象的话,ostream类没有公有的复制构造函数。
3.返回对象 - 不能是局部变量
4.返回const对象
- 重载<<必须返回非const ostream对象的引用,因为如果返回对象的话,ostream类没有公有的复制构造函数。
什么情况下会调用析构函数?
- 动态变量,在执行完定义该对象的程序块时,调用该对象的析构函数。
- 静态变量,在程序结束时调用
3.new创建的,调用delete删除时才会调用
显式调用析构函数的顺序和new的顺序相反
重载<<运算符
ostream & operator<<(ostream &os, const class_name &obj) {
os << …
return os;
}
设置为友元函数。
转换函数
- 其他类型转换为类类型:class_name(type_name value);
- 类类型转换为其他类型:operator type_name();
- 转换函数不能有返回类型
阅读全文
0 0
- 第十二章 类和动态内存分配
- 第十二章 类和动态内存分配
- 第十二章 类和动态内存分配
- 第十二章:类和动态内存分配
- 第十二章 类和动态内存分配
- 第十二章-类和动态内存分配
- 【c++ primer】第十二章 类和动态内存分配
- 第十二天(类和动态内存分配·一)
- 2012/1/27 《C++ Primer Plus》第十二章:类和动态内存分配 学习笔记
- 《C++ Primer Plus(第六版)》(23)(第十二章 类和动态内存分配 复习题和答案)
- 《C++ Primer Plus(第六版)》(24)(第十二章 类和动态内存分配 编程题和答案)
- 《C++ Primer Plus(第六版)》(22)(第十二章 类和动态内存分配 笔记)
- 动态内存分配和类
- 类和动态内存分配
- 类和动态内存分配
- 类和动态内存分配
- 类和动态内存分配
- 第十二章 动态内存
- Java 基础(11)—— 回调机制
- js 将用连接符连接的英文字符串转换成驼峰命名的三种方法
- 重装纯净官方Win10系统
- phpcms v9 内容页日期时间标签{$inputtime}显示格式
- Eclipse空白包的显示或隐藏
- 第十二章:类和动态内存分配
- 如何将tensorflow.Variable中的某些元素取出组成一个新的矩阵
- Qt 学习 第5节 Qt之创建并使用共享库
- 树莓派 FFmpeg 支持GPU硬解码
- 局域网内两台电脑ping不通
- 演讲PPT:用Kubernetes实现Fabric区块链即服务的实践
- Java集合框架面试问题集锦
- 大奖赛+秘密信息
- matlab里svd(Y,'econ')