细嚼慢咽C++primer(4)——类(1):构造函数,类型别名

1  最简单地说,类即使定义了一个新的类型和一个新的作用域。

2  基础

1  构造函数

构造函数一般应使用一个构造函数初始化列表,来初始化对象的数据成员。

Sales_item(): units_sold(0), revenue(0.0)  {};

2  成员函数

在类内部定义的函数默认为inline.

将关键字const加在形参表之后,就可以将成员函数声明为常量:

double avg_price() const;

const成员不能改变其所操作的对象的数据成员。const必须同时出现在声明和定义中,若只出现在其中一处,就会出现一个编译时错误。


习题12.1:

using namespace std;
class Person {private:string name;string address;
}


习题12.2:

using namespace std;
class Person {Persion(string &name, string &addr){}private:string name;string address;
};

习题12.3:

using namespace std;
class Person {Persion(string &name, string &addr){}private:string name;string address;public:string getName() const{return self.name;}string getAddr() const{return self.address;}
};
返回名字和地址的操作不应该修改成员变量的值,所以应该指定成员函数为const。


习题12.4:

name和address为private实现数据隐藏, 函数getName() 和getAddr()为public提供接口,构造函数通常也为public.


3  数据抽象和封装

在C++中,使用访问标号(public, private, protected)来定义类的抽象接口和实施封装。

两个优点:

  • 避免类内部出现无意的,可能破坏对象状态的用户级错误;
  • 随时间推移可以根据需求改变或缺陷报告来完善类实现,而无需改变用户级代码。

习题12.5:

C++支持三种访问标号,public private protected


习题12.6:

class关键字定义的类,默认的访问权限为private,struct关键字定义的类,默认的访问权限是public。


习题12.7:

封装是一种将低层次的元素组合起来形成新的,高层次实体的技术。

封装隐藏了内部元素的实现细节。


4 使用类型别名来简化类

类可以定义自己的局部类型的名字。

class Screen {
public:// interface member functionstypedef std::string::size_type index;
private:std::string contents;index cursor;index height, width;
};

可以在类定义体内指定一个成员为inline,作为其声明的一部分,或者,也可以在类定义体外部的函数定义上指定inline。在声明和定义处指定inline都是合法的。

注意:inline成员函数的定义必须在调用该函数的每个源文件中是可见的,不在类体内定义的inline成员函数,其定义通常应放在有类定义的同一头文件中。


12.8:

class Sales_item {public:double avg_price() const;bool same_isbn(const Sales_item &rhs) const{return isbn == rhs.isbn;}private:std:string isbn;unsigned units_sold;double revenue;
};
inline double Sales_item :: avg_price() const
{if (units_sold) return revenue/units_sold;elsereturn 0;
}

其他的两种写法:

  • 将成员函数的定义写在类内部;
  • 在类内部进行成员函数的声明时,指定inline关键字。

习题12.9:

class Screen {
public:// interface member functionstypedef std::string::size_type index;Screen(index ht, index wt, const std::string &cntnts){height = ht;width = wt;contents = cntnts;}
private:std::string contents;index cursor;index height, width;
};
 




转载于:https://www.cnblogs.com/suzhou/p/3638972.html

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

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

相关文章

2018全球硬科技创新暨“一带一路”创新合作大会,这些硬科技都要来!

来源:新华社近年来,多个省市陆续开始了一场科技标签秀,以深圳等为代表的“人工智能”、以上海为代表的“金融科技”,以贵州为代表的“大数据”等纷纷亮相,而伴随着“一带一路”新丝路的战略实施,西安&#…

吴恩达:人工智能寒冬不会到来,但我们太乐观了

来源:量子位AI Winter Is Coming?人工智能领域的各路专家学者曾经为这个话题吵翻了天。最近,这个话题又有更新了。人工智能寒冬论的作者Filip Piekniewski在博客上发文,给自己提出的观点增加了新的证据。非常巧的是,吴…

SQL数据库误删除表数据恢复 SQL数据库truncate表数据恢复

SQL数据库误删除表数据恢复 SQL数据库truncate表数据恢复 误删除表需要恢复该表,要注意几个问题, 第一 删除表后是否新建表了 是否插入数据了。 第二 删除表后是否立即关闭SQL服务了/ 第三 数据库是否是完整模式 我们先来了解下 删除表做了那些操作&…

自动驾驶中常用的四类机器学习算法

来源:智车科技机器学习算法已经被广泛应用于自动驾驶各种解决方案,电控单元中的传感器数据处理大大提高了机器学习的利用率,也有一些潜在的应用,比如利用不同外部和内部的传感器的数据融合(如激光雷达、雷达、摄像头或物联网)&…

CSS样式如何解决IE浏览器不同版本的兼容问题

如果你想让浏览器是固定的IE6版本&#xff0c;那么你做网页的时候在<head>后面加上一句话&#xff1a; <meta http-equiv"X-UA-Compatible" content"IEEmulateIE6" /> 把这句话加在<head>标签后面第一句话就OK了。注意&#xff0c;再强调…

国际基因编辑科技发展报告

来源&#xff1a;全球技术地图作者&#xff1a;贾晓峰 中国科学技术信息研究所摘要&#xff1a;以特异性的改变遗传物质靶向基因序列为目标的基因编辑技术是近年生命科学领域最热门的研究领域之一。围绕基因编辑的相关领域研究和人物事件连续多年入选Nature国际科学事件和科学人…

各大主流.Net的IOC框架性能测试比较

http://www.cnblogs.com/liping13599168/archive/2011/07/17/2108734.html转载于:https://www.cnblogs.com/PatrickLee/p/3347322.html

Help View修复

好吧&#xff0c;手贱把ProgramData里关于Help View的某些数据删除了 (在任何情况下都不要删除此文件夹中的任何数据)。即使卸载后重新安装也出现错误&#xff0c;可以参考的http://social.msdn.microsoft.com/Forums/vstudio/pt-BR/8525617e-6300-415f-8980-8658ba0045ef/visu…

科学家发现大脑动态评估信息重要性机制

大脑中部的丘脑室旁核&#xff08;PVT&#xff09; 图片来源&#xff1a;中科院深圳先进技术研究院来源&#xff1a;中国科学报周末该在家看书还是出去K歌&#xff1f;寒冬将至&#xff0c;该坚持健身还是涮个火锅&#xff1f;每天&#xff0c;人们都会面临上百种选择。以往&am…

JS 利用数组拼接html字符串

var cc []; cc.push(<td colspan fields.length style"padding:10px 5px;border:0;">); cc.push(</td>); return cc.join(); 转载于:https://www.cnblogs.com/101key/p/3349143.html

腾讯AI Lab研发「智能显微镜」 抢先布局病理分析领域

来源&#xff1a;腾讯AI实验室腾讯 AI Lab 在南京举办的「腾讯全球合作伙伴大会」上宣布&#xff0c;其AI医疗领域研究已抢先从影像筛查进入病理分析阶段&#xff0c;相关的「智能显微镜」项目已在研发测试阶段。智能显微镜融入了人工智能&#xff08;AI&#xff09;的视觉、语…

石墨烯新新新应用,MIT大规模生产细胞大小机器人,有感知能存储

&#xff08;MIT开发的微型机器人&#xff09;来源&#xff1a;机器人大讲堂近期&#xff0c;MIT又玩出了新花样&#xff0c;在前几个月成功开发出细胞大小并且能够感知外部环境、储存数据并执行计算任务的微型机器人后&#xff0c;MIT又带来了新消息&#xff1a;他们为大规模生…

windows 批处理-重命名

从数字1递增批量重命名ren.bat&#xff1a; echo off SETLOCAL ENABLEDELAYEDEXPANSION set /A num0 FOR /F "tokens*" %%i in (dir /A-D /B /OD /TC) do ( IF NOT "%%i""%~n0%~x0" ( set /A num1 ren "%%i" "!num!%%~xi&quo…

多种图像配准方法的综合比较(KAZE、SIFT、SURF等)

接触图像配准是从去年十月份开始的&#xff0c;老师要求我尽快重现一遍整个流程&#xff0c;这样对课题可以有一个整体的把握&#xff0c;而后再仔细推敲细节&#xff0c;甚至提出自己的想法&#xff0c;老师的这个思路现在觉得非常不错。自己当时选取的是SURF方法&#xff0c;…

全面梳理百度世界大会:量产L4乘用车和两款音箱 还有挖掘机技术

来源&#xff1a;网易智能摘要&#xff1a;今天&#xff0c;百度一年一度的世界大会如约而至&#xff0c;李彦宏宣布发布量产红旗L4级乘用车&#xff0c;推出两款小度语音智能产品和智能城市“ACE计划”。多年以来&#xff0c;百度世界大会和AI开发者大会成为百度对外的窗口&am…

图像处理中的通信原理——冈萨雷斯读书笔记(一)

信息的概念在信息论中很明确&#xff1a;用于衡量事件的不确定性。信息的传播形式或者所载体便是信号&#xff0c;比如说电信号、光信号、声音信号。那么信息的表现形式就是消息&#xff0c;可以是语言、文字、图像。所以说图像处理依然是信息与通信领域的一部分。它可以看作是…

【转载】贝叶斯决策论

原文链接&#xff08;http://www.cnblogs.com/elaron/archive/2012/10/29/2745010.html&#xff09; 1、什么是行为&#xff1f; 但是&#xff0c;有时候&#xff0c;后验概率本身只能说明具有特征x的样本属于ωi类的可能性有多少&#xff0c;却没能表示如果将样本分到ωi类时的…

李彦宏:人工智能会让这个世界变得更美好吗?YES AI DO!

来源&#xff1a;亿欧摘要&#xff1a;李彦宏表示&#xff0c;今天我们让公园充满AI&#xff0c;未来我们会让整个世界充满AI。11月1日&#xff0c;在百度世界大会上&#xff0c;李彦宏围绕人工智能是否能让这个世界变得更美好开展演讲&#xff0c;并且结合系列百度新近推出的产…

听说你盗图都盗绿了?

知乎传送门&#xff1a;https://www.zhihu.com/question/29355920 为什么图片反复压缩后会普遍会变绿而不是其他颜色&#xff1f;这是大神做的模拟迭代压缩的测试&#xff1a;https://m13253.github.io/JPEGreen/。排名第一的回答已经很仔细了&#xff0c;关于图像压缩不是很懂…

二 jQuery 语法

通过jQuery你可以选择/查询html元素&#xff0c;并对它们进行操作。jQuery 使用的语法是 XPath 与 CSS 选择器语法的组合。 $(this).hide() 隐藏当前html元素 $("#id").hide() 隐藏id为id的html元素 $("p").hide() 隐藏所有 <p> 元素 $(".test&…