【C++ Primer plus】【第十一章】使用类

来源:互联网 发布:python yield什么意思 编辑:程序博客网 时间:2024/05/05 17:59

【简述】

本章主要包括以下几方面,运算符重载,友元函数,<<重载,类的自动转换和转换函数

【知识点】

1.运算符重载形式:operatorop(argumentlist) EG:operator+()

2.返回类的声明(不会改变数据的那种)

Time sum(const Time &t) const ——说明该函数不会修改数据成员

Time Time::sum(const Time &t) const —— 返回类型  域名::函数

3.返回值如果返回的局部变量或临时对象,不能返回引用,因为返回后放空。类似指正

4.重载函数

total = A.operator+(B);

相当于

total = A + B;

这也是为什么要重载运算符,这种重载方法,类名必须在左侧,如果基本类型则有问题,如果要基本类型在左,则需要用友元函数;

5.重载的运算符,其中一个操作数必须是自定义,否则和基本类型运算符冲突,(如不可重载 int-int)

6.非成员函数重载,如友元函数,但=,(),【】,-》必须用成员函数

7.友员函数的原型要声明在对应类中,并加friend;实现时,不用域,因为非成员函数,亦不需要friend关键字

8.<<重载时,返回引用,这样可以使用 COUT<<A<<B<<ENDL ,形式,如果直接返回对象就不能这么用

  由于基类引用可以用于扩展类,所以ostream得引用,可以返回fotream的流,P394

9.COUT<<A;  实际上相当于operator<<(cout,a);

friend std::ostream & operator << (std::ostream & os, const Time &t)

10.非成员函数的形参数目和操作数相同,而成员函数少1,因为存在隐式调用。

11.类中直接定义的简短函数将被作为内联

12.枚举可以在类声明时定义,使用变量注意域,如友元函数不在命令空间,变量使用全名限定

13.如果函数返回或计算出一个新类,要考虑用构造函数,这样可以保证正确性。

14.一元的运算符重载

VECTOER OPERATOR-() CONST

VECTOER VECT::OPERATOR-() COSNT {}

【转换相关】

1.C++中,接受一个参数的构造函数为将类型与该参数相同的值得类提供转换,作为转换函数。(隐式转换)

my=1.1 则直接调用,生成临时对象,前提是有一个参数的构造函数。

2.explicit 关闭隐式转换

3.P413,eg:什么情况使用stonewt(double)

A.将stonewt对象初始化为double值, Stonewt Jumbo(1.1)

B.double值赋给对象,mycat = 1.1

C将double值穿个接受Stonewt的参数  func(1.1),FUNC接受类

D.返回时声明为Stonewt的函数, return 11.1

E.以上倾向,可以向上合理转换的的情况,如把1.1都换成1.

4.可以int = Stonwt么,可以,但不是用构造函数,用到转换函数。

double A = double (Stonewt),前提是定义了转换函数,那么怎么定义ne?

operator typename()

限制:必须是类成员方法,无入参,无返回类型

CLASS A

{

PUBLIC:

operator int() const;

}

A::operator int() const

{

return xx,

}

这样是cout<<可以直接指定类对象名称,如果只有一个转换函数,没有二义性,则自动转换为double

5.最后,多用显示,少用隐式



0 0
原创粉丝点击