C++学习笔记8:类和动态内存分配
来源:互联网 发布:深圳网络推手公司收费 编辑:程序博客网 时间:2024/06/03 08:17
1.动态内存和类
1.1 静态数据成员在类声明中声明,在包含类方法的文件中初始化。在初始化时使用作用域运算符并指出类型,但是不用static关键字。如果静态成员是整形或者枚举类型,则可以在类声明中初始化。
//StringBad.hpp#include <iostream>#ifndef STRINGBAD_H_#define STRINGBAD_H_class StringBad {private:char * str;int len;static int num;public:StringBad(const char * s);~StringBad();};#endif // ! STRINGBAD_H_//StringBad.cpp#include <cstring>#include "StringBad.h"using std::cout;int StringBad::num = 0;StringBad::StringBad(const char * s) {len = std::strlen(s);str = new char(len + 1);std::strcpy(str, s);num++;}StringBad::~StringBad() {--num;delete[]str;}1.2 在以上代码中,构造函数在初始化字符串指针不能这样做:
str = s;原因是:字符串并不保存在对象中,字符串单独保存在堆内存中,对象仅保存了到哪去查找字符串的信息。
1.3 特殊成员函数
- 默认构造函数:如果没有定义构造函数,则提供默认构造函数;可以显示地定义不带任何参数的默认构造函数;带参数的构造函数也可以是默认构造函数,只要所有参数都为默认值;只能有一个默认构造函数。
Kunt(int n = 0){Kunt_n=n;}
- 默认析构函数:如果没有定义
- 复制构造函数:
复制构造函数的原型:
Class_name(const Class_name &);何时调用复制构造函数:新建一个对象并将其初始化为同类现有对象时(包括按值传递参数,函数返回对象),如下:
StringBad ditto(motto);StringBad also = motto;StringBad metto = StringBad(motto);StringBad *p = new StringBad(motto);默认的复制构造函数的功能:逐个复制非静态成员的值(注意:当有类有指针型成员时,容易出现问题,因为复制的是指针而没有复制指针所指向的内容,所以相当于有两个指针指向同一块内存,当分别调用析构函数时会释放同一块内存两次)
解决办法:定义一个显示复制构造函数进行深度复制
StringBad::StringBad(const StringBad & st) {num++;len = st.len;str = new char[len + 1];std::strcpy(str, st.str);}
- 复制运算符
赋值运算符重载原型:
Class_name & Class_name::operator=(const Class_name &);何时使用重载的赋值运算符:将已有对象赋给另一个对象;初始化对象时不一定会使用赋值运算符,取决于实现。
StringBad knot;knot = motto;赋值运算符重载的功能:对成员进行逐个复制(除静态成员)
显示地提供赋值运算符重载:
StringBad & StringBad::operator=(const StringBad & st) {if (this == &st)return *this;delete[]str;len = st.len;str = new char[len + 1];std::strcpy(str, st.str);return *this;}
阅读全文
0 0
- C++学习笔记8:类和动态内存分配
- C++学习笔记3---类和动态内存分配
- 《C和指针》学习笔记六/结构、联合、 动态内存分配/
- C语言学习笔记——动态内存分配
- c语言学习笔记34之动态内存分配
- 郝斌老师c语言学习笔记----动态内存分配
- 学习记录-C和指针-第十一章 动态内存分配
- (《Linux环境下C语言编程指南》学习笔记一)C语言中的静态内存分配和动态内存分配
- 翁恺C笔记|动态内存分配
- 2012/1/27 《C++ Primer Plus》第十二章:类和动态内存分配 学习笔记
- C++学习笔记(第12章->类和动态内存分配)
- c++学习笔记 类和动态内存分配与特殊成员函数
- C++基础学习笔记:类与动态内存分配
- 动态内存分配_c语言学习笔记
- C和指针之动态内存分配堆、栈、全局区(静态区)、常量区对比总结学习笔记
- 动态内存分配和类
- 类和动态内存分配
- 类和动态内存分配
- SpringMVC 自定义类型转换器
- vue新建项目(二)安装element-ui
- Android--网易有道词典案例源码
- 关于索引的降序排列
- c++大数据乘法和除法
- C++学习笔记8:类和动态内存分配
- Sublime Text 3 OS X命令行
- selenium(4)-打印、设置等待时间
- 通过Atlas实现MySQL读写分离
- (122)关键帧和曲线
- MyBatis 报Lock 锁异常
- 欢迎使用CSDN-markdown编辑器
- java 泛型接口 泛型方法
- eclipse neon 插件subversion,如何显示提交的用户名