C++ primer(5th)七章

类的基本思想是数据抽象和封装

7.1定义抽象数据类型

定义在类内部的函数是隐式的inline函数
成员函数体可以在类内也可以在类外
定义类
在这里插入图片描述
使用类
在这里插入图片描述
在这里插入图片描述
Sales_data的成员
定义成员函数
引入this
this 是一个常量指针,不可改变this中保存的地址
引入const成员函数

C++中的 struct 和 class 基本是通用的,唯有几个细节不同:
1:使用 class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默认都是 public 属性的。(最本质的区别)
2:class 继承默认是 private 继承,而 struct 继承默认是 public 继承(《C++继承与派生》一章会讲解继承)。
3:class 可以使用模板,而 struct 不能。

7.1.4构造函数

名字和类名相同,没有返回类型,不能被声明成const的
默认构造函数:无需实参
只有当类没有声明任何构造函数时,编译器才会自动的生成默认构造函数

7.1.5拷贝、赋值、析构

7.2访问控制与封装

封装实现了类的接口和实现的分离,隐藏了类的实现细节,用户只能接触到类的接口。

优点:

隐藏类的实现细节;
让使用者只能通过程序规定的方法来访问数据;
可以方便的加入存取控制语句,限制不合理操作;

类自身的安全性提升,只能被访问不能被修改;

类的细节可以随时改变,不需要修改用户级别的代码;

7.2.1友元

友元在类内,具体位置不限
在这里插入图片描述
友元的声明用于指定访问权限

7.3类的其他特性

7.3.3类类型

即使类内成员完全一样,两个类也是两个不同的类型
类允许包含指向它自身类型

7.3.4友元再探

友元类的成员可以访问此类的所有成员
令成员函数作为友元:明确指出该成员所属类,如:
friend void window_mgr::clear();
类和非成员函数的声明不是必须在它们的友元声明之前。

7.4类的作用域

知识点1:名字查找的顺序:由内而外、自上而下

知识点2:类的定义处理步骤:首先编译成员的声明,直到类全部可见是再编译函数体

即成员函数在类的声明全部处理完之后才会被定义,所以可以调用函数中定义的任何名字

知识点3:在类中,类型名要特殊处理,最好是定义在类的一开始,并且不能与外层作用域中同名

7.5构造函数再探

7.5.1初始值列表

  1. 如果没有在构造函数的初始值列表中显式的初始化成员,则该成员将在构造函数体之前进行默认初始化

  2. 构造函数初始值列表中的初始值顺序不会影响实际的初始化顺序

  3. 知识点1:类内成员是const、引用时或者使用某种类类型没有默认构造函数的成员时必须将其初始化

知识点2:初始化和赋值是不等价的

知识点3:成员初始化的顺序一般是没有要求的,但是若用一个成员来初始化另一个成员是,就必须考虑到其定义时的顺序(写时保持顺序一直即可)

7.5.2委托构造函数

使用它所属类的其他构造函数执行它自己的初始化过程,即它把它自己的一些职责委托给了其他构造函数
当构造函数委托给另一个构造函数时,受委托的构造函数的初始值列表及其函数体先被执行,接着才会执行到委托函数的函数体。

class OH{
OH(string s, int a, int b):book(s),price(a),sale(b){} //三参数构造函数的参数列表和函数体首先被执行
OH():OH("",0,0);//默认构造函数又委托给了三参数构造函数
OH (istream& is):OH(){}//OH (istream& is)是一个委托构造函数,它委托给了默认构造函数OH()

string book;
int price;
int sale;
};

7.5.3默认构造函数的作用

知识点1:默认构造函数在很多情况下也是非常重要的。
1:当类的作用域内不需要使用任何初始值定义非静态变量时
2:当类中含有需要使用默认构造函数当作被委托构造函数时
3:类的成员没有在构造函数初始值列表中显示初始化时
知识点2:当类中定义了其它类型的构造函数时,最好提供一个默认的构造函数,养成良好的习惯。
知识点3:类声明对象是不需要加括号!加括号是声明函数的。

7.5.4隐式的类类型转换

抑制构造函数定义的隐式转换
将构造函数声明用explicit加以阻止
关键字explicit只对一个实参的构造函数有效
explicit只能在类内使用
explicit构造函数只能用于直接初始化在这里插入图片描述

7.5.5聚合类

聚合类的条件:
1.所有成员都是public的
2.没有定义任何构造函数
3.没有类内初始值
4.没有基类,没有virtual函数

7.5.6字面值常量类

数据成员都是字面值类型的聚合类是字面值常量类
类至少含有一个constexpr构造函数

7.6类的静态成员

知识点1:类的静态成员:该成员只需与类的本身有关,而不是与类的对象有关,加上static关键字即可声明,其不与任何实例化对象绑定,但是我们仍然可以使用类作用域运算符访问静态成员。
知识点2:static声明在内部。在外部定义时,不加static.类似与一个全局变量,其初始值必须是常量表达式。
知识点3:静态成员独立于任何对象,其类型可以是它所属的类类型。而非静态成员只能声明为其类的指针或引用
类外定义静态成员时不能重复static关键字
在这里插入图片描述
静态成员的类内初始化
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "C Primer 5th"是由Stanley B. Lippman、Josee Lajoie和Barbara E. Moo合著的一本经典的计算机编程教材。本书是一本C语言入门教程,适合想学习C语言的初学者使用。该教材已经成为许多大学计算机科学专业的必读教材。 "C Primer 5th"以清晰的语言和简单的编程示例来引导读者逐步学习C语言的基本概念和技巧。它从最基础的C语言语法和变量开始,然后逐渐介绍更高级的主题,如数组、指针、结构体、函数和文件操作等。 值得一提的是,本书在教授C语言的同时,也不忽略了现代编程实践和技术。它包含了C99和C11标准的新特性和改进,以及对C语言在实际编程中的应用的详细讨论。 此外,本书还提供了大量的练习题和编程挑战,帮助读者巩固所学知识,并提供了答案和解释供参考。这些练习题以及书中的代码示例都有助于读者理解如何将C语言应用于实际项目开发中。 总之,《C Primer 5th》是一本优秀的C语言教材,适合初学者入门。它以清晰易懂的语言、实用的示例和丰富的练习题,帮助读者逐步掌握C语言编程的基本技能和实践经验。无论是想要学习编程基础知识的初学者,还是希望进一步提升C语言编程技能的经验丰富者,都能从这本书中获益良多。 ### 回答2: 《C Primer第五版》是一本非常流行的编程入门教材,也是学习C语言的经典教材之一。本书详细介绍了C语言的基本概念和语法规则,让读者快速入门并掌握C语言编程。 这本书的英文高清版指的是书籍中提供了高质量的英文文本和印刷质量。高清版通常在图书印刷质量方面有更高的标准,印刷清晰度更高,图文排版更精美。对于学习者来说,高清版可以更清晰地看到代码和示例,并更好地理解教材。 《C Primer第五版》是一本非常实用的书籍,里面包含了大量的示例和练习题,帮助读者巩固所学知识。通过学习本书,读者可以了解C语言的基本语法、数组、指针、结构体、函数等内容,并能够编写简单的C程序。 此外,本书还介绍了一些常用的C库函数和标准库,如字符串处理函数和数学函数等,方便读者快速应用到实际的编程项目中。 总的来说,如果你想学习C语言编程,尤其是作为初学者,那么《C Primer第五版》是一本非常值得推荐的书籍。无论是英文高清版还是其他版本,都能为你提供清晰易懂的教材内容,帮助你快速入门并掌握C语言编程。 ### 回答3: 《C Primer Plus》是一本经典的C语言编程入门书籍,目前最新的版本是第五版。这本书以简洁明了的风格,深入浅出地介绍了C语言的基本概念和编程技术。 《C Primer Plus》第五版的英文高清版,是指该书的英语原版的高清电子版本。高清版的出现,使读者可以更清晰地阅读书中的文字和代码示例, 更加方便地学习和理解编程知识。 该书按照逻辑清晰地从基本的C语言语法开始,分步骤地引导读者进入编程的世界。它从简单的概念和例子开始,逐渐引入更复杂的编程技术,包括数组、函数、指针、结构体、文件操作等。每个概念都有相应的代码示例和练习题,读者可以通过实践巩固所学知识。 此外,该书还涵盖了一些常见的编程技巧和建议,帮助读者养成良好的编程习惯。它也介绍了一些C语言的高级特性,如内存管理、位运算、预处理器等。这些内容不仅适用于初学者,也对有一定编程经验的读者有所裨益。 总体而言,《C Primer Plus》第五版的英文高清版是一本全面且易于理解的C语言入门书籍。通过系统地学习该书,读者将获得扎实的编程基础,为进一步学习和应用C语言打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值