十七 拷贝构造和拷贝赋值
浅拷贝和深拷贝
)如果一个类中包含指针形式的成员变量,缺省的拷贝构造函数只是复制了指针变量的本身,而没有复制指针所指向的内容,这种拷贝方式称为浅拷贝。
)浅拷贝将导致不同对象之间的数据共享,如果数据存放在堆区,可能会在析构时引发"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. [C++基础]goto的用法

    原文: http://blog.csdn.net/shimazhuge/article/details/8448773 ---------------------------------------- ...

  2. AFNetworking 3.0携带參数上传文件Demo

    一.服务端代码: 服务端是java用国产nutz搞的,实际mvc框架都大同小异.就是提交文件的同一时候还带了个表单參数 @AdaptBy(type=UploadAdaptor.class, args= ...

  3. WPF中控件TextBlock使用(简单)

    TextBlock主要用来显示文字.比方: <TextBlock Name="txtBlockOutpuMessage"   Text="hello" / ...

  4. SQL数据库问题 解释一下下面的代码 sql 存储过程学习

    SQL数据库问题 解释一下下面的代码 2008-08-13 11:30wssqyl2000 | 分类:数据库DB | 浏览1154次 use mastergocreate proc killspid( ...

  5. 一个简单的JS日期挂历脚本

    分享一个JS脚本做的日期挂历,在需要的时候可以引入你的程序. 如需单独引入这个脚本,请将它保存在一个文件中然后引入它:如这样 <script type="text/javascript ...

  6. CodeForces - 811C Vladik and Memorable Trip(dp)

    C. Vladik and Memorable Trip time limit per test 2 seconds memory limit per test 256 megabytes input ...

  7. Chrome 最小化恢复之后部分黑屏

    解决办法:设置->显示高级设置->关闭硬件加速

  8. myeclipse2014 破解步骤

    1.打开破解文件夹Myeclipse 2014 patch,运行run.bat文件 2.在破解界面中,usercode随便输入, systemid 在右边的SystemId按钮处,点击. 将自动生成一 ...

  9. C# Area 双重路由如何写

    在WebApi项目里面 一般除了接口, 还有管理端...一些乱七八糟的,你想展示的东西, 一种做法是分开写: 比如管理后台一个项目, 然后接口一个, 然后页面一个, 其实这样做也可以,但是这么做, 无 ...

  10. SQLServer2008 关于Group by

    如果我们想知道每个国家有多少种水果,那么我们可以通过如下SQL语句来完成: SELECT COUNT(*) FruitName AS 水果种类, ProductPlace AS 出产国 FROM T_ ...