c++之类与对象<二>

目录

 前言

一:类的六个成员默认函数

二:构造函数 

1.概念

2.特征

3.全缺省调用构造函数 

4. 类中无构造函数

三:析构函数

1.概念

2.特征

3.类中无析构函数

四:拷贝构造函数

1.概念

2.特征

 3.类中无拷贝构造函数 

4.拷贝构造的实现场景 

5.举例

五:运算符重载

1.概念

2.注意事项

3.举例

六:日期类 

七:在深层次理解流插入和流提取 

1.理解

2.实现

 八:const成员

1:举例

2.const的使用场景

九:取地址以及const取地址操作符重载


接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

 前言

在经过类与对象的初步了解之后,接下来我们就来研究关于类与对象的“六大天选之子”函数

一:类的六个成员默认函数

二:构造函数 

1.概念

构造函数是一个特殊的成员函数,名字与类名相同,主要任务为初始化对象,在对象整个生命周期内只调用一次

2.特征

1.函数名与类名相同

2.无返回值

3.对象实例化时编译器自动调用对应的构造函数

4.构造函数可以重载,即一个类可以有多个构造函数

3.全缺省调用构造函数 

无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个(不然会造成歧义)。

注意:无参构造函数,全缺省构造函数,我们没写编译器自己默认生成的构造函数,都可以认为是默认构造函数

一般建议:每个类都提供一个默认构造函数

不传参数就可以调用构造函数

4. 类中无构造函数

1.在c++类型分为内置类型和自定义类型,内置类型就是如int,double,char,各种指针等,自定义类型就是用struct,class,union等定义的

1.对于内置类型成员编译器不做处理,为随机值

2.自定义类型的成员,会去调用它的默认构造(不用传参数的构造)

3.为解决内置类型成员的问题,在内置成员声明时给缺省值

三:析构函数

1.概念

与构造函数正好相反,对象在销毁时自动调用析构函数,完成对象中资源的清理工作,局部对象销毁工作是由编译器完成的

2.特征

1.析构函数名是在类名前加~

2.无参数无返回类型

3.一个类只能有一个析构函数,不能重载

4.对象生命周期结束时,c++编译系统自动调用析构函数

3.类中无析构函数

1.在c++类型分为内置类型和自定义类型,内置类型就是如int,double,char,各种指针等,自定义类型就是用struct,class,union等定义的

1.对于内置类型成员编译器不做处理

2.自定义类型的成员,会去调用它的析构函数

四:拷贝构造函数

1.概念

只有单个形参,该形参是对本类类型对象的引用,一般加const修饰再用已存在的类类型对象创建新对象时由编译器自动调用

2.特征

1.拷贝构造是构造函数的一个重载形式

2.拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式会直接报错,因为会引发无穷递归

 3.类中无拷贝构造函数 

1.若未显示定义,编译器会调用默认的拷贝构造函数。默认的拷贝构造函数对象按内存存储按字节需完成拷贝,这种靠被叫做浅拷贝或者值拷贝

2.对于内置类型,编译器可以直接拷贝

3.对于自定义类型,需要调用这个成员拷贝构造

4.拷贝构造的实现场景 

自己实现了析构函数释放空间,就需要实现拷贝构造

5.举例

五:运算符重载

1.概念

c++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,具有返回值类型,函数名以及参数列表

函数原型为 返回值类型 operator 操作符(参数列表)

2.注意事项

1.不能通过连接其他符号来创建新的操作符,比如operator @

2.重载操作符必须有一个类类型参数

3.用于内置类型的运算符,其含义不可改变

4.作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this

5.    .*    ::    sizeof    ?:     .    以上五个运算符不能重载 

6.运算符重载函数可以定义在全局,也可以在类中

3.举例

六:日期类 

 

 

七:在深层次理解流插入和流提取 

在如日期类这样的类中,用d1.Print(),来打印数据显得麻烦,c++中习惯用cout打印数据,如果能实现cout<<d1;这样的话会显得更加方便,代码的可读性更强

1.理解

cout<<i:实际底层为cout.operator<<(i)  //  int的实现方式

cout<<d:底层实现为cout.operator(i)  //double的实现方式

运用的是运算符重载+函数重载

观看官网的介绍得

对于各种内置类型的实现是定义好的 

如cout是在ostream的类中,cin是在istream的类中

2.实现

但对于自定义类型,不能直接访问,需要自己实现

 

定义在全局,并且要访问成员变量使用友元函数 

 八:const成员

1:举例

要解决上述问题就得用  void Print() const ,用const去修饰this指针,然后this的类型为const A*

2.const的使用场景

只要成员函数内部不改变成员变量,最好加上const,const对象和普通对象都可以调用

九:取地址以及const取地址操作符重载

这个函数大概了解即可,不写编译出也会自动生成地址 

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值