拷贝构造和拷贝赋值、静态成员(static)、成员指针、操作符重载(day06)
十七 拷贝构造和拷贝赋值
浅拷贝和深拷贝
)如果一个类中包含指针形式的成员变量,缺省的拷贝构造函数只是复制了指针变量的本身,而没有复制指针所指向的内容,这种拷贝方式称为浅拷贝。
)浅拷贝将导致不同对象之间的数据共享,如果数据存放在堆区,可能会在析构时引发"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)的更多相关文章
- 构造函数和初始化表、this指针与常函数、析构函数、拷贝构造与拷贝赋值(day05)
十四 构造函数和初始化表 ... 初始化表 )语法形式 class 类名{ 类名(形参表):成员变量1(初值),...{} }; )必须要使用初始化表的场景 -->如果有类 类型的成员变量,而该 ...
- day7_子类的拷贝构造与拷贝赋值
- 移动构造和移动赋值与std::move
------------------------------------移动构造------------------------------------------ 传统的深拷贝深赋值 对于类中,含有 ...
- C++基础 (4) 第四天 this指针 全局函数和成员函数 友元 操作符重载
1static强化练习-仓库进货和出货 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; c ...
- 重点:QObject 的拷贝构造和赋值操作——私有
QObject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域.因此所有继承 ...
- QObject 的拷贝构造和赋值操作
QOject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域.因此所有继承自 ...
- STL——容器(Map & multimap)的拷贝构造与赋值
1. Map & multimap 的拷贝构造与赋值 map(const map &mp); //拷贝构造函数 map& operator=(con ...
- STL——容器(Set & multiset)的默认构造 & 带参构造 & 对象的拷贝构造与赋值
1. 默认构造 set<int> setInt; //一个存放int的set容器. set<float> setFloat; //一 ...
- C++基本函数的调用优化(构造、拷贝构造、赋值)
合理的函数可提升时间和空间的利用率 //Test1.h #include<iostream> using namespace std; struct ST { private: int a ...
随机推荐
- NGINX之——配置HTTPS加密反向代理訪问–自签CA
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46695495 出于公司内部訪问考虑,採用的CA是本机Openssl自签名生成的,因 ...
- C语言之文件操作07——读取文件数据并计算均值方差标准差
//文件 /* =============================================================== 题目:从文本文件"high.txt" ...
- 体验决定销量,真假4K争论仅仅是忽悠人而已
随着4K电视越来越多.网上关于真假4K电视的争论也越来越激烈,RGB与RGBW的死掐也进入了白热化阶段.从某种意义上讲.真假4K话题是4K电视市场竞争加剧的必定结果.并且这场争论已经严重影响了 ...
- JS0基础学习笔记(1)
为了须要,最近開始学习JS相关知识.基本的方式是通过看视频以及查阅相关手冊.并动手实践,亲手写出每一个小案例,以下是相关代码(每一个案例用分隔线隔开). <!DOCTYPE html> & ...
- Openstack能解决这些问题吗?请各位大侠一起来讨论
1.10万规模的虚拟机,每一个虚拟机能够在不论什么一个计算节点上启动,该怎样做?计算,存储,网络都是怎么拉通与配合的? 2.用户怎样自己定义业务网络,怎样解决网络不够用的情况?正常就4096个vlan ...
- luogu1991 无线通讯网
题目大意 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络:每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话.任意两个配备了一条卫星电话线路的哨所(两边都ᤕ有 ...
- Privoxy shadowscocks代理
ubuntu已经启动好了sock5的代理, 代理为: 127.0.0.1:1080. #使用Privoxy将sock5代理映射为http代理. 安装Privoxy sudo apt-get updat ...
- hdu1150——最小点覆盖
As we all know, machine scheduling is a very classical problem in computer science and has been stud ...
- B2568 比特集合 树状数组
啊啊啊,跳题坑死人.抽了一道国集的题,自己瞎编了一个算法,好像过不了而半途而废.转去看题解,发现用二维树状数组维护一下,偏移量我倒是想对了,但是维护的东西和我的完全不一样.还是有很大差距啊... 题解 ...
- Coursera Algorithms week2 基础排序 练习测验: Permutation
题目原文: Given two integer arrays of size n , design a subquadratic algorithm to determine whether one ...