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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 兔子把木屑吃了怎么办? 小车司机碰瓷大车司机怎么办 在淘宝买到假的护肤品怎么办 淘宝购物发现是假的怎么办 电脑键盘灯不亮不能打字怎么办 海棠兔屁股有屎怎么办 大冒险告白被接受了怎么办剧透微博 大冒险被告白了怎么办 腐书网 大冒险告白被接受了怎么办 006 大冒险告白被接受了怎么办广播剧 coolpad手机解锁图案忘了怎么办 装死兔严重掉毛怎么办 兔子嘴巴磕破了怎么办 嘴巴里面摔烂了怎么办 兔子的鼻子损了怎么办 两个人嘴巴被粘牙糖粘住怎么办 小鸟被老鼠粘粘住了怎么办 小猫被老鼠粘粘住怎么办 羊子嘴巴烂了怎么办 小孩突然嘴肿了怎么办 电视机图像颜色变了 怎么办 冰沙床垫结块了怎么办 冰沙床垫融化了怎么办 脚真菌感染肿了怎么办 水雾魔珠被吃了怎么办 怀孕40天出血了怎么办 联璧金融里的钱怎么办 提现的钱不对怎么办 究极日月蛋太多怎么办 人脸识别不匹配怎么办 地下城没有属强怎么办 传奇属性点错了怎么办 龙之谷技能太多怎么办 龙之谷pk卡怎么办 为什么访问别人空间没有记录怎么办 被蚊孑咬了有小红包怎么办 微信建了个打牌群找不客源怎么办 三星手机一直停在开机画面怎么办 微信猜拳被骗了怎么办 组队领金币的码怎么办 cad画图时鼠标飘怎么办