博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类和动态内存分配
阅读量:6241 次
发布时间:2019-06-22

本文共 1130 字,大约阅读时间需要 3 分钟。

hot3.png

C++自动提供以下函数

  1.  默认构造函数
  2. 复制构造函数
  3. 赋值运算符
  4. 析构函数
  5. 地址运算符

复制构造函数和赋值运算符重载

每当程序生成了对象的副本,编译器都将调用复制构造函数。具体来说,当函数按值传递对象或者返回对象时,都将使用复制够着函数。

浅复制:默认复制构造函数,逐个复制非静态成员,复制的是成员的值。

深复制:复制构造函数应当复制字符串并将副本的地址赋给str成员。不是仅仅复制字符串的地址。这样在调用析构函数时就不会出现释放已经释放的字符串。

复制构造函数和赋值运算符重载的几个区别:

1. 复制构造函数没有返回值,赋值运算符返回对象的一个引用。

2. 复制构造函数之前对象没有分配内存,不需要delete

3.复制构造函数会增加对象的个数

StringBad::StringBad(const StringBad &st){     //对象个数 ++     len = st.len;     str = new char[len + 1];     std::stcpy(str,st.str);}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;}

可以这样避免编译器生成默认的构造函数和赋值运算符重载函数

class Queue{    private:        Queue(const Queue &){}        Queue &operator=(const Queue &){           // return *this;        }}

c程序员通常使用NULL而不是0来表示一个指针为空;用'\0'来指明字符串的结束,而不是0

初始化成员列表

语法:classname::func(int n,int m):mem1(n),mem2(m) {

}

作用:这些初始化工作是在对象创建时完成的,此时还未执行括号中任何代码。

  1. 这种格式只能用于构造函数
  2. 必须用这个格式来初始化费静态const成员(const成员复值将编译不通过)
  3. 必须用这个格式来初始化一个引用数据成员

成员初始化顺序于他们出现在类中的顺序相同,于他们在初始化成员列表顺序无关。

转载于:https://my.oschina.net/u/919373/blog/147354

你可能感兴趣的文章
对前面的自定义的toast制作拖拽效果,以及双击居中效果
查看>>
如何规划构建一套大型的Citrix桌面虚拟化架构 - 后记
查看>>
animationFromTop
查看>>
SEM如何做数据分析?
查看>>
语音转文字如何在线转换的?
查看>>
PXE批量实现自动化安装系统
查看>>
tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError:)...
查看>>
为域用户创建漫游用户配置文件
查看>>
sql server 第二讲
查看>>
什么是壳 - 脱壳篇01
查看>>
数据库基础
查看>>
python里面 循环明细对比 相同人员明细,生成同一订单里面
查看>>
linux top 命令的一些解释
查看>>
前端之HTML内容
查看>>
关于Datagridview控件用法的一些总结
查看>>
Mac 常用设置
查看>>
linux常用命令(22)gzip命令
查看>>
找出一个字符串中第一个只出现一次的字符
查看>>
CSS学习笔记(一)深入理解position属性和float属性
查看>>
xml入门
查看>>