C++总结(二)

一、this指针

1、概念:类非静态成员函数的第一个隐藏的参数,该参数使用指向调用当前函数的对象
2、特性

  • this指针类型:T* const
    普通类型成员函数:T* const 可以修改对象的内容,可以调用普通和const类型的成员函数
    const类型成员函数:const T* const:this指向不能修改并且指向对象中的内容也不能修改,只能调用const类型的成员函数

  • this是非静态成员函数的第一个隐藏参数,隐藏:用户在编写函数时不用给出this的参数,该参数是编译器自己维护,调用该函数也不需要手动传递,this指针的传参也是编译器自己进行

  • this指针只存在于正在运行的成员函数中,this指针不会存在于对象中,不会影响类对象的大小

  • 静态成员函数:没有this指针

  • this指针的传递:一般情况exc寄存器(this_call:调用约定),也可能通过参数压栈的方式进行传递:push 对象地址(比如:类中如果包含不定参数的成员函数)

3、this指针是否可以为NULL

  • 如果成员函数是通过对象的方式进行调用,this指针一定不会为NULL:
  • 如果成员函数是通过类类型的指针方式进行调用,this指针可能会为NULL:

4、this指针位置:栈

类的编译过程:
1、识别类名
2、识别类中的成员
3、识别类中的成员函数,并对成员函数进行改写

二、类中六个默认的成员函数

1、什么是默认的成员函数:如果用户没有显示定义该成员函数,编译器将会自动生成一个
2、默认的成员函数都有那些?

一、构造函数
1、概念:是一个特殊的成员函数,函数名必须与类名相同,在创建对象期间由编译器自动来调用,已完成对象的初始化工作,并且在对象的整个生命周期内只调用一次。(因此初始化只需要初始化一次)
2、特性

  • 1>函数名必须与类名相同
  • 2>没有返回值
  • 3>由编译器自动调用
  • 4>构造函数可以重载(用户根据自己的实际情况)
  • 5>如果用户没有显示定义,编译器将会生成一个默认的构造函数(注意:默认的构造函数是无参的)
  • 6>将无参的构造函数和全缺省的构造函数统称为缺省的构造函数,并且他们不能同时存在
  • 7>构造函数不能使用const进行修饰,构造函数是要修改类的成员变量
  • 8>构造函数不能是静态的成员函数
  • 9>构造函数不能使用virtual来进行修饰
  • 10>构造函数具有初始化列表

初始化列表
1、注意
>>只有构造函数具有初始化列表
>>初始化列表中只能初始化类中的非静态成员变量
>>成员变量在初始化列表中不能重复出现,只能初始化一次
>>成员变量在初始化列表中的初始化次序:初始化次序与成员变量在初始化列表中出现 的次序无关,初始化次序与其在类中声明次序一致
>>尽量避免采用成员来初始化成员
2、必须要在初始化列表中初始化的成员
>>const类型的成员变量
>>引用类型的成员
>>如果包含类类型的对象,并且该对象所对应的类包含非缺省的构造函数

3、编译器生成的默认构造函数

  • 用户没有显示定义构造函数的前提下,编译器才会生成,只要用户定义(不论构造函数是什么形式的),编译器不在生成
  • 编译器生成的默认构造函数一定是无参的

4、调用场景
在创建新对象时(注意:不是用类类型对象创建对象),编译器会调用构造函数

二、拷贝构造函数
1、概念:是一个特殊的构造函数,一定是单参,并且该参数一定是类类型对象的引用,在用类类型对象构造新对象时由编译器自动进行调用。
2、特性

  • 1>单参的,参数必须要是类类型对象的引用
  • 2>如果用户没有演示定义,编译器会生成一个默认的拷贝构造函数

3、默认拷贝构造函数
4、调用场景:用类类型对象创建新对象时,A a1; A a2(a1);以值的方式传参||以值的方式作为函数的返回值

三、赋值运算符重载
1、关于编译器生成的默认赋值运算符的重载
>>如果用户没有定义,编译器将会生成一份默认的赋值运算符重载
>>编译器生成的赋值运算符重载是:浅拷贝
如果类中涉及到对象资源的管理时,需要用户自己显式定义赋值运算符重载–深拷贝
2、调用场景: a1=a2;

运算符重载
1、注意函数重载进行区分—运算符重载是一个函数,而函数重载是一些在相同作用域具有相同名称但参数列表不同的函数
概念:运算符重载是具有特殊函数名的函数,也具有其返回值类 型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似
2、作用:可以提高代码的可读性
3、注意:
>>不能重载一些其他的运算符,比如:@
>>重载的运算符:一定要符合该运算符的含义
>>运算符重载可以是类的成员函数,如果重载成类的成员函数,参数个数会少一个,因为有默认this指针
>>常见运算符的重载:
前置++/后置++(前置–/后置–);cout的重载;[];operator*()/operator->():比如智能指针、迭代器;operator()(参数列表)----->仿函数

四、析构函数
1、概念:一个特殊的成员函数,在对象销毁时,由编译器自动进行调用,完成对象中资源的清理工作
2、特性

1、析构函数的名字:类名前添加~
2、用户如果没有显式定义,将由编译器自动生成 编译器生成的析构函数是不会自动释放对象中资源,因此如果类中涉及到资源管理,需要用户显式给出析构函数的定义
3、析构函数一定是无参,没有返回值:不能重载,一个类最多只能有一个析构函数

3、编译器生成的默认的析构函数
4、调用场景
:在对象销毁时---->函数结束时调用delete和delete[]
五、operator&()和operator&()const

三、const关键字

1、在C语言中:const只能修饰变量(局部变量、函数形参、函数的返回值等),将其称作为一个不能被修改的变量
2、在C++中
a、使用const修饰变量

  • 非类成员变量:局部变量,全局变量,函数参数,函数的返回值----const修饰的变量,不能被修改,该变量已经是一个常量,还具有宏替换的属性
  • 类成员变量:const类型的成员变量,初始化:只能在构造函数||拷贝构造函数初始化列表中初始化
    b、使用const修饰类非静态的成员函数:const修饰成员函数,其出现位置一定在函数原型之后
    实际上const本质修饰的是该成员函数的this指针,表明在该成员函数中不能修改类中成员变量(例外:如果类中某个成员变量采用mutable修饰)

const成员函数中:不可以调用普通类型的成员函数,可以调用const类型的成员函数
普通成员函数中:可以调用普通类型的成员函数,可以调用const类型的成员函数

四、static关键字

1、static在C语言中的作用

  • a、static修饰变量:

修饰函数中的局部变量:延长该变量的生命周期、具有记忆功能:会记录上次函数运行结束之后的内容
修饰全局变量:改变该变量的链接属性----只能在当前文件中进行访问

  • b、static修饰函数:

表明该函数只能在当前文件中进行访问

2、static在C++中的作用

  • a、static修饰变量:

静态成员变量特性:
1>静态成员变量是类的属性,不属于某个具体的对象
2>存储位置:静态区—不会存在于对象中,不会影响sizeof的结果
3>访问:类名::静态成员变量名字||对象.静态成员变量名字
4>初始化:不能放在构造函数初始化列表中初始化,在类中只是声明,必须在类外进行初始化

  • b、static修饰函数:

静态成员函数特性:
1>没有this指针
2>不能直接访问非静态成员函数
3>不能直接调用非静态成员函数
4>不能用const修饰、virtual
5>调用方式:类名::静态成员函数名字||对象.静态成员函数名字

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值