`

【c++ primer】第十一章 使用类

 
阅读更多

一,操作符重载

1)函数重载(多态)

名称相同,特征标(参数列表)不同的函数。完成相同的基本操作

2)操作符左侧的对像是调用对象,操作符右侧的作为参数被传递的对象

3)重载限制:1>重载后的操作符至少有一个操作数是用户定义的类型。防止用户为标准类型重载操作符

2>使用操作符,不能违反操作符原来的句法规则。

3>不能修改操作符优先级,不能定义新的操作符

4>可被重载的操作符:

+ - * / % ^ & | ~
! = < > + = -= *= /= %=
^= &= | =<< >> > >= << == = !=
<= >= && || ++ -- [ ] ( ) ->
->* , new new[ ] delete delete[ ]

4)不要返回局部变量的引用,因为函数执行完毕后,局部变量将会消失

二,操作符重载示例

程序注意事项:1>不能使用关键字 time作为类名

2>操作符重载total = weeding + waxing;执行为: weeding.operator+(waxing),然后返回一个Time对象

3>将参数声明为引用的目的:提高效率

三,友元函数(只有在声明中的原型中使用)

1,定义:友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)

2,例子说明:Time重载操作符* A=B*1.5;对应调用步骤B.operator*(1.5);

操作符左边对应对象,为成员函数调用法则

如果A=1.5*B;不适用于 操作符重载函数(成员函数)

则须定义Time operator* (double m,const Time &t);非成员函数

但是非成员函数不能直接使用私有成员

所以使用友元函数friend Timeoperator* (double m,const Time &t)

3,友元函数:1>在类中声明,但它不是成员函数。不能使用成员操作符“.”(B.operator*)来调用

2>但有与成员函数访问权限相同

3>不要使用Time::限定符

4>调用时候:A=operator(1.5,B)

4,定义如下

Time operator *(double m,const &t)
{
Time result;
long totalminutes = hours*mult*60+minutes*mult;
result.hours=totalminutes/60;
result.minutes=totalminutes%60;
return result;
}

如果写成如下形式可以不用友元函数(不用访问私有成员)

Time operator* (double m,const &t)

{

return t*m;

}

5,常用的友元:重载<<操作符

1>"<<" 重载之输出对象

void operator<< (ostream &os,Time &t)

{

cout<<t.hours<<" hours "<<t.minutes<<" minutes ";

}

使用:cout<<B;

不能这样使用:cout<<"the time is:"<<B<<"ok";

如果想这样使用

void &operator<<(ostream &os,Time &t)

{

cout<<t.hours<<" hours "<<t.minutes<<" minutes ";

return os;

}

四,类的自动转换和强制类型转换

1,例子:long count = 8; 将整型自动转化为long 型

int *p=10; //非法的

int *p=(int *)10;//将指针设置为地址10

2,接受一个参数的构造函数 可以作为转换函数

explicit 关键字用来关闭自动转换特性

int 强制转换 将待转换的值 四舍五入为最接近的值

五,复习

1)成员函数和友元函数区别

成员函数:类的组成部分,可以直接访问对象的成员而不用使用成员操作符

友元函数:友元函数不是类组成部分,不能隐式访问类成员

2)非成员函数访问类成员,必须是友元么?

要访问私有成员,必须是友元。而访问共有成员可以不是友元

3)重载操作符= () [ ] ->必须使用成员函数来定义

分享到:
评论

相关推荐

    c++primer第五版习题答案(第12章)

    此外,描述中提及的“真正的C++primer习题集”,这可能表明该习题集是针对教材内容设计的,目的是帮助学生消化和练习书中的理论知识。通过解决这些习题,学生可以加深对C++语言特性的理解,包括类和对象、动态内存...

    c++primer第五版习题答案(第17章)

    《C++ Primer》第五版是C++领域一本非常权威的教材,由Stanley B. Lippman、Josée Lajoie和Barbara E. Moo编著。该书是按照C++11标准编写的,它涵盖了C++语言的核心特性,包括数据类型、运算符、控制结构、函数、类...

    c++primer第五版习题答案(第18章)

    第18章作为《C++ Primer》全书的一部分,通常包含了该书中特定的专题。习题答案是指针对这一章节练习题的具体解答。这些练习题被设计用来加深读者对于章节内容的理解和应用,包含编程实践、问题解析、算法设计等多...

    c++primer第五版习题答案(第19章)

    标题《c++primer第五版习题答案(第19章)》和描述《c++primer第五版中文版课后答案(第19章)pdf格式,真正的c++primer习题集(第五版),用手机拍的,但是每个字都能看的很清楚》透露出的IT知识点主要围绕《C++ ...

    C++Primer 第四版课后习题解答(第1~18章完整答案)完整版

    第十一章“泛型算法”讨论了C++标准库中的通用算法,如排序、查找、变换等。习题解答会涉及到这些算法的使用和效率分析。 第十二章“类和数据抽象”介绍了面向对象编程的基础,如封装、继承和多态。习题解答将涉及...

    c++primer第五版习题答案(第13章)

    根据提供的文件信息,文件标题为“c++primer第五版习题答案(第13章)”,描述提到这是“c++primer第五版中文版课后答案(第13章)”的PDF格式文件,且这些答案来自书籍的习题集。同时,文件内容是通过OCR技术从纸质...

    c++primer第五版习题答案(第11章)

    c++primer第五版中文版课后答案(第11章)pdf格式,真正的c++primer习题集(第五版),用手机拍的,但是每个字都能看的很清楚

    c++primer plus第七章到第十三章习题源码

    8. **模板(Templates)**:第十三章的习题可能涉及到模板,它是C++中的泛型编程工具,可以创建通用的函数和类。`template &lt;typename T&gt;`这样的语句表示模板的声明。 9. **异常处理(Exception Handling)**:异常...

    C++Primer课后习题解答(第1~16章完整答案) 清晰 完整版

    从提供的文件信息中,我们可以提炼出一系列与C++编程语言相关的知识点。以下是这些知识点的详细说明: 1. C++程序结构:C++程序通常由两类文件组成,即头文件和源文件。头文件通常用于声明接口,如类、函数原型等,...

    C++ primer 第十六章 泛型 实现自定义Queue 修改版

    "C++ primer 第十六章 泛型 实现自定义Queue 修改版"的主题主要围绕如何利用C++的模板机制来实现一个自定义的队列(Queue)容器。在实现过程中,可能会遇到模板编译错误,解决这些问题需要对C++的模板语法有深入的...

    C++ Primer第四版【中文高清扫描版】.pdf

    《C++ Primer 第四版》是著名的...总而言之,《C++ Primer 第四版》是一本全面、权威的C++教程,其内容经过精心组织,配合丰富的实例和习题,能够引导读者深入理解C++语言,同时对于中高级程序员也具有很高的参考价值。

    C++primer第五版英文版

    《C++ Primer 第五版》是一...总之,《C++ Primer 第五版》是学习C++语言的一本权威教材,它不仅涵盖了C++的基本语法和特性,还包括了C++11标准中的新特性。本书内容全面、讲解清晰,适合不同层次的程序员学习和参考。

    C++ Primer 第五版 课后习题答案(高清无水印PDF)

    本书第1至11章的习题答案部分提供了对课后习题的详细解答,并附有相应的代码示例。这些习题答案不仅帮助读者验证自己的解题思路是否正确,更通过代码的实际运行结果加深对C++语言的理解。 在习题1.3中,我们看到了...

    C++ Primer Plus 编程练习源码工程 第11章

    在本压缩包文件中,我们聚焦于"C++ Primer Plus"这本书的第11章编程练习。这是一份由用户LeonardoLiuwenbo在学习过程中编写的源代码工程,旨在帮助读者深入理解和应用C++语言。第11章通常涵盖C++中的高级主题,可能...

    C++ primer 5th,第十一章——关联容器

    C++ primer 5th,第十一章——关联容器,笔记&思维导图 按教材整理。

    C++primer中文第五版

    《C++ Primer 中文第五版》是一本深受程序员喜爱的C++学习书籍,它全面而深入地介绍了C++编程语言的各个方面。这本书以其清晰的解释、丰富的实例和实用的建议,成为了初学者和有经验的程序员提升C++技能的重要参考...

    c++primer 第五版第11章 课后习题答案

    在第11章中,主要探讨了C++中的模板和泛型编程。这些习题答案涵盖了这一章的重要概念,包括函数模板、类模板、模板特化、模板元编程以及泛型算法的应用。 1. **函数模板**:11.1.cpp可能涉及到函数模板的定义和使用...

    c++ primer 第十五章 文本查询程序

    在C++ Primer第十五章中,我们探讨了一个重要的主题——文本查询程序的设计与实现。这个程序的核心在于处理文本数据,并提供一种高效的查询机制。在这个章节,我们不仅学习了C++的基础语法,还深入理解了数据结构和...

    C++Primer(第4版)-课后习题答案.pdf

    11. 第十一章泛型算法:介绍C++标准库中的算法,如排序、搜索、交换、复制等,它们可以应用于不同的容器。 12. 第十二章类和数据抽象:讲解面向对象编程的核心概念,如类的定义、封装、构造函数、成员函数、友元等...

    c++primer高清中文版-第5版.zip

    但又是如此美妙的编程语言,在工业界和学术界都可以使用,《C++ Primer(第5版)》即针对初学者,也同样适用于有一定编程经验的读者,第5版配备了C++11新标准,是C++粉丝们书架上必备的一本经典著作。一书在手,架构...

Global site tag (gtag.js) - Google Analytics