十七 拷贝构造和拷贝赋值
浅拷贝和深拷贝
)如果一个类中包含指针形式的成员变量,缺省的拷贝构造函数只是复制了指针变量的本身,而没有复制指针所指向的内容,这种拷贝方式称为浅拷贝。
)浅拷贝将导致不同对象之间的数据共享,如果数据存放在堆区,可能会在析构时引发"double free"异常,因此就需要自己定义一个支持复制指针指向的内容的拷贝构造函数,即深拷贝。 在C++类中会提供一个缺省的拷贝赋值运算符函数,完成两个对象直接的赋值操作。但是它和缺省拷贝构造函数类似,也是浅拷贝,为了得到深拷贝赋值的效果,必须自己定义拷贝赋值运算符函数 s2 = s3;//s2.operator=(s3) 类名& operator=(const 类名& that){
if(this != &that){//1)防止自赋值
)释放旧资源
)分配新资源
)拷贝新数据
}
return *this;//5)返回自引用
} 十八 静态成员(static)
静态成员变量
class 类名{
static 数据类型 变量名;//声明静态成员变量
};
数据类型 类名::变量名 = 初值;//定义和初始化
)静态成员变量不属于对象,但是可以通过对象去访问它。
)不能在构造函数中定义和初始化,需要在类的外部单独的定义和初始化
)静态成员变量内存在全局区;
)静态成员变量可以通过类名直接访问
类名::静态成员变量
)静态成员变量在类所创建多个对象之间是共享的 静态成员函数
class 类名{
static 返回类型 函数名(形参表){函数体}
};
)静态成员函数没有this指针,也没有const属性
)可通过"类名::"直接访问,也可以通过对象访问
注:静态成员函数只能访问静态成员 单例模式:一个类只允许创建唯一的对象
)禁止在类的外部创建对象:私有化构造函数
)类的内部维护唯一对象:静态成员变量
)提供访问单例对象的方法:静态成员函数
)创建方式:
--》饿汉式:单例对象无论用或不用,程序启动即创建。
--》懒汉式:单例对象在用的时候再创建,不用即销毁。
eg:
class A{
public:
static A& get(void){
return m_a;
}
private:
A(void);
A(const A&);
static A m_a;
};
===================
十九 成员指针(了解)
成员变量指针
)定义
类型 类名::*成员指针变量名 = &类名::成员变量;
)使用
对象.*成员指针变量名;
对象指针->*成员指针变量名;
".*":成员指针解引用运算符
"->*":间接成员指针解引用运算符
注:成员变量指针的本质是类中特定成员在对象中的相对地址。 成员函数指针
)定义
返回类型 (*类名::成员函数指针)(形参表)
= &类名::成员函数名;
)使用
(对象.*成员函数指针)(实参表);
(对象指针->*成员函数指针)(实参表); ==================
二十 操作符重载
eg:复数x+yi +4i
(+2i) + (+4i) = +6i
双目操作符
1.1 运算类的双目操作符(L # R):+ - * /
-->左右操作数可以是左值也可以是右值
-->表达式结果是右值
)成员函数形式
L#R的表达式会被编译器自动处理为L.operator#(R)的成员函数调用,该函数的返回值即为表达式的值。 )全局函数形式 1.2 赋值类的双目操作符 练习:复习String类和单例模式实现

拷贝构造和拷贝赋值、静态成员(static)、成员指针、操作符重载(day06)的更多相关文章

  1. 构造函数和初始化表、this指针与常函数、析构函数、拷贝构造与拷贝赋值(day05)

    十四 构造函数和初始化表 ... 初始化表 )语法形式 class 类名{ 类名(形参表):成员变量1(初值),...{} }; )必须要使用初始化表的场景 -->如果有类 类型的成员变量,而该 ...

  2. day7_子类的拷贝构造与拷贝赋值

  3. 移动构造和移动赋值与std::move

    ------------------------------------移动构造------------------------------------------ 传统的深拷贝深赋值 对于类中,含有 ...

  4. C++基础 (4) 第四天 this指针 全局函数和成员函数 友元 操作符重载

    1static强化练习-仓库进货和出货 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; c ...

  5. 重点:QObject 的拷贝构造和赋值操作——私有

    QObject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域.因此所有继承 ...

  6. QObject 的拷贝构造和赋值操作

    QOject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域.因此所有继承自 ...

  7. STL——容器(Map & multimap)的拷贝构造与赋值

    1. Map & multimap 的拷贝构造与赋值 map(const map &mp);               //拷贝构造函数 map& operator=(con ...

  8. STL——容器(Set & multiset)的默认构造 & 带参构造 & 对象的拷贝构造与赋值

    1. 默认构造 set<int> setInt;              //一个存放int的set容器. set<float> setFloat;          //一 ...

  9. C++基本函数的调用优化(构造、拷贝构造、赋值)

    合理的函数可提升时间和空间的利用率 //Test1.h #include<iostream> using namespace std; struct ST { private: int a ...

随机推荐

  1. 2014年辛星解读css第二节

    第一节我们简单介绍了一下CSS的工作流程,我相信读者会有一个大体的认识,那么接下来我们将会深入的研究一下CSS的细节问题,这些问题的涉及将会使我们的工作更加完好. *************凝视*** ...

  2. mac下安装tensorflow及入门例子

    https://www.tensorflow.org/install/install_mac 使用virtualenv安装,virtualenv相当于使tensorflow运行在虚拟机环境下. 需要使 ...

  3. 转:Java 计算2个时间相差多少年,多少个月,多少天的几种方式

    日期比较对象 DayCompare 代码用到了  lombok ,如果不用,其实就是把getter / setter方法自己写一遍,还有构造方法. @Data @Builder public stat ...

  4. RedisUtil: Jedis连接自动释放

    package cloud.app.prod.home.utils; import redis.clients.jedis.Jedis; import redis.clients.jedis.Jedi ...

  5. 回调函数实现类似QT中信号机制(最简单)

    1. 定义回调接口类: class UIcallBack{public: virtual void onAppActivated() = 0; virtual void onShowMore() = ...

  6. PCB 3D PCB 后续改进与扩展功能一些想法

    再次感受到WelGl实现3D效果的震撼, 一.目前功能: Gerber与钻孔 解析 并转为3D实景图,用户360度操控 二.后续改进扩展功能: 1.增加ODB++解析 2. 3D 尺寸标注(外形尺寸, ...

  7. go之for循环

    一.基于计数器的迭代 格式 for 初始化语句; 条件语句; 修饰语句{} 实例 package main import "fmt" func main(){ for i:=0;i ...

  8. 微信js sdk上传多张图片

    微信js sdk上传多张图片,微信上传多张图片 该案例已tp3.2商城为例 直接上代码: php代码: public function ind(){ $appid="111111111111 ...

  9. chapter6 数据结构基础之习题 Parentheses Balance

    You are given a string consisting of parentheses () and []. A string of this type is said to be corr ...

  10. JQuery 使用.show()和.hide()做的可爱动画

    只是最基本的东西,没啥稀奇的,只是今天看jquery教程的时候偶然看到show()和hide()是可以写两个参数的, 第一个参数是元素隐藏/显示的速度(单位:毫秒),另一个是一个function类型. ...