Professional C++读书笔记05

2012-05-20

Chapter09

1、复制构造函数浅复制时的隐患

         若对象中有指针成员,则当对象作为形参传入时

         例如void myFun(Spreadsheet s)……

                   Spreadsheet s1(5,3);

                   myFun(s1);//    s1与s中的指针成员指向同一块内存(s是由s1通过复制构造函数生成的),当myFun()结束时,会释放s,则s指针成员所指向空间释放,导致s1的指针成员指向的空间释放,即s1的指针成员指向一块已经释放的内存。

2、赋值运算符浅复制时的隐患

         Spreadsheet s1(2,2),s2(4,3);

         s1=s2;

         则s1,s2中的指针成员指向了同一块内存(s1的),导致s2的指针成员原来所指向的内存成了孤儿内存

         ∴重写赋值运算符注意的三点

         1,检查自赋值情况。2,删除原来所指向的内存,并用rhs的值重新分配内存。3,返回(*this),即对象的引用

3、也可将复制构造函数与赋值运算符设为私有(不必实现),禁止用户这么做(比如数组类)

         private:

                   Spreadsheet (const Spreadsheet &src);

                   Spreadsheet &operator=(const Spreadsheet &src);

4、静态数据成员:一个与类关联而不是与对象关联的数据成员

         会默认初始化为0,在函数与方法体之外进行初始化

         int Spreadsheet::sCounter=0;                   //初始化

5、const数据成员:通常是静态的

         尽可能用static const 取代全局变量

         ∵是static ∴必须在源文件中为其声明空间(方法体外)

                   如 const int Spreadsheet::MaxValue=100;

         另外,C++允许在类文件中声明这些变量的同时为其赋值

         class Spreadsheet

         {

                   public : static const int MaxValue=100;

         }

6、静态方法:方法应用于整个类,而不是单个对象

         ∴并不是在一个特定的对象上调用,即没有this指针

         不能在静态方法中访问非静态成员

         在类中像调用常规函数一样调用静态方法。

         若声明为public,则在类外可这样调用

         string str=Spreadsheet::doubleToString(5);

7、const方法

         如果有一个const对象或者对const对象的引用,编译器不允许该对象调用任何方法(防止修改数据成员),除非是const方法

         例如:double getValue() const;               //类定义中,即头文件中

                   double SpreadsheetCell::getValue()        const

         {        return mValue;                                     //方法定义中,即源文件中

         }//const不能修改数据成员,否则编译器报错

        

         非const对象可调用非const、const方法

         const对象只能调用const方法

8、关键词mutable

         在const方法中,编译器不允许修改普通数据成员,但可在const方法中修改mutable数据成员

         如在类定义中:mutable int NumberAccess;

         则可在const方法中修改NumberAccess的值

9、函数重载:补遗

         可以编写两个同名且参数相同的方法,一个声明const,一个不声明

         若提供const对象,调用const方法,反之亦然

10、内联

         法一:在类定义中inline声明,方法定义中实现

         法二:类定义中直接写出其方法定义,即在类定义中展开代码,无需关键词inline

11、友元

         类可以将其他非成员函数声明为友元,可以访问protected、private成员和方法

         类的内部会暴露给其他类或函数,破坏抽象原则

         所以,在有限的情况下(如运算符重载)使用友元

转载于:https://www.cnblogs.com/yangtianxing/archive/2012/06/04/2535374.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请不要对我说“你要马上把这个小问题修改好”

“我需要”,“小问题”,“立刻”。你激怒我了。你的每个词都激怒我了。这种情绪很难翻译成英语表达,但在荷兰,有些人就是用这种方式要求你。翻译成英语,这有点像“你要几分钟内把这个东西修改好”。大家都知道的这样的…

javascript 常量_JavaScript中的常量

javascript 常量JavaScript常数 (JavaScript Constants) Before ES15, the only way to declare variables using the var keyword. JavaScripts inbuilt feature of hoisting variables could be carried out using the var keyword. If youre unfamiliar with variables in J…

GDB与远程(交叉)GDB调试

GDB提供的功能 1、启动的程序,可以按照自定义的要求运行程序 2、可以让被调试的程序在指定的断点处停住(断点可以是条件表达式) 3、当程序被停住时,可以检查这个时候程序中发生的事 4、动态地改变程序的运行环境。 远程(交叉)GD…

OTR-Linux控制台打印颜色区分.

What I write, what I lost. 对于依靠打印来作debug的主要手段的, 能够区分打印中的debug信息和error信息便显得非常重要. 原文的介绍有一篇关于控制台颜色的文章http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip01/ 有定义实现各种颜色的方式. 以此为基础, 方式挺…

c#异常处理_C#中的异常处理

c#异常处理What an exception is? 有什么例外? An exception is a runtime error; that means an abnormal situation which is created at run time and the program doesn’t execute successfully. Due to the exceptions, our program gets crash. 异常是运行…

(转)走进AngularJs(六) 服务

原文地址:http://www.cnblogs.com/lvdabao/p/3464015.html 今天学习了一下ng的service机制,作为ng的基本知识之一,有必要做一个了解,在此做个笔记记录一下。 一、认识服务(service) 服务这个概念其实并不陌…

Linux驱动程序框架以及概述

目录驱动程序三种基本类型(组成)设备驱动程序功能驱动程序的内核模块机制(开发模式)驱动程序框架三个主要部分1、字符设备驱动程序框架2、块设备驱动程序框架2、网络设备驱动程序框架驱动程序三种基本类型(组成&#x…

curl 使用整理(转载)

我一向以为,curl只是一个编程用的函数库。 最近才发现,这个命令本身,就是一个无比有用的网站开发工具,请看我整理的它的用法。 curl网站开发指南 阮一峰 整理 curl是一种命令行工具,作用是发出网络请求,然…

Linux内核逻辑结构

linux内核从逻辑上可以分为5个部分: 1、进程调度 进程调度控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的程序。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其他资源,则该进程是不可…

对批量文件重命名

一、 文件夹下存放各种不同名称的同类型文件 F:\test 二、重命名格式从a0开始,数字依次递增,a0,a1,a2,a3… import ospathr"F:\test"#要修改文件的路径 namer"a"#命名从什么开始 num0#默认从0开始,即a0,a1,a2...... …

替换Quartus 自带编辑器 (转COM张)

正文 此处以Quartus II 11.1和Notepad v5.9.6.2为例。 1. 使用QII自动调用Notepad来打开HDL、sdc、txt等文件;并且可以在报错的时候,Notepad可以直接高亮所报错的行(此模式下,Notepad最大化后效果最佳)。 方法&#xf…

scala 方法重载_Scala中的方法重载

scala 方法重载Scala方法重载 (Scala method overloading) Method overloading is a method that is redefined in different ways under the same name. Method overloading is one of the methods used to implement polymorphism in Scala. 方法重载是一种使用相同名称以不…

C#网页自动登录和提交POST信息的多种方法 新人学习中

网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以用来提取网页HTML的组件比较多,常用的用WebBrowser、WebClient、HttpWebRequest这三个。 以下就分别用这三种方法来实现:1、WebBr…

四、采集和制作数据集

一、采集数据 安装labelme:pip install labelme 打开labelme:labelme 将收集好的照片(320320,png格式)存放到一个文件夹中,例如我的是F:\test,再此文件夹下再创建个文件夹label用于存放标签文件 使用labelme打开数据…

MTFBWU的完整形式是什么?

MTFBWU:愿力量与您同在 (MTFBWU: May The Force Be With You) MTFBWU is an abbreviation of “May The Force Be With You". MTFBWU是“愿力量与你同在”的缩写 。 It is an expression, which is commonly used in messaging or chatting on social media n…

VMware14.0 安装 CentOS7.2

大致流程 对于VMware14.0安装包用百度网盘下载即可。 链接:https://pan.baidu.com/s/1DEGa47EbI1Fup_MTXhv0xg 提取码:izo6 华为云CentOS7 下载划线的。其他步骤与大致流程里一样。 最后输入root 以及配置的密码即可:密码输入时是没有任何显…

基于visual Studio2013解决C语言竞赛题之1049抓牌排序

题目解决代码及点评/* 功能:插入排序。许多玩牌的人是以这样的方式来对他们手中的牌进行排序的:设手中原有3张牌已排好序,抓1张新牌,若这张新牌的次序在…

学习Lucene笔记一:创建索引

public class HelloLucene {/*** 建立索引* param args*/public void index(){IndexWriter writer null; try {//1.创建Directory,// Directory directory new RAMDirectory();//索引是建立在内存中的Directory directory FSDirectory.open(new File("D:/Lucene/ind…

【C++进阶】C++创建文件/屏幕输出流类(将信息同时输出到文件和屏幕)

在软件的调试技术中,很重要的一个技术是将软件运行过程中的一些信息写入到“日志文件”中。但是同时还要将信息显示到屏幕上,以方便程序员实时查看这些信息。 最简单的一种办法是这样的: std::ofstream output("debug.log", ios::…

五、加载数据集

之前写过加载数据集的一些小笔记,这里详细内容就不再叙述了 详细学习可以参考该博文二、PyTorch加载数据 一、分析 因为U-net网络架构是输入1通道,大小为(572,572)的灰度图,图片大小无所谓,我的思路是将三通道的图像使用OpenCV进…