c++基础知识总结

原创 2016年05月30日 16:56:22

构造函数
1.构造函数没有返回值,函数名就是类名
2.构造函数可以重载,以满足对对象不同参数的需求。实参决定了调用哪个构造函数
3.构造函数在定义对象的时候由系统自动调用。且每个对象只调用一次。
4.无参构造函数和全缺省构造函数都是缺省构造函数,且这俩只能存在一个(二义性问题)
5.构造函数不可以用const修饰,因为常函数无法修改其值。
6.如果没有显式定义,系统会自动生成一个默认构造函数,但是这个构造函数什么了不会做。

默认构造函数
如果没有显示定义一个构造函数,系统会自动生成一个默认构造函数,但是这个默认构造函数什么也不会做。即使该构造函数什么也不做,编译器也不会为该类合成默认的构造函数。编译器生成的默认构造函数使用与变量初始化相同的规则来初始化成员,具有类类型的成员通过运行各自的默认构造函数来进行初始化。内置和符合类型的成员如指针、数组,只对定义在全局作用域中的对象初始化,当对象定义在局部作用域时,内置和符合类型的成员不进行初始化。在某些情况下,默认构造函数是由编译器隐式使用的。

拷贝构造函数(创建对象的时候用构造,复制对象的时候用复制构造)
参数只有一个,就是const型的对象引用(如果不传引用作为参数,那么传入的是一份临时拷贝,而临时拷贝需要构建对象,又需要调用拷贝构造函数,造成无限递归)
是构造函数的重载
如果没有定义,会默认合成一个(合成的拷贝构造函数会进行简单的拷贝)
使用场景:
1、对象实例化对象
CDate d1(1990, 1, 1);
CDate d2(d1);
2、传值方式作为函数的参数
void FunTest(const CDate date)
{}
3、传值方式作为函数返回值
CDate FunTest()
{ CDate date; return date;
}

析构函数
析构函数:与构造函数功能相反,在对象被销毁时,由编译器自动调用,完成类的一些
资源清理和汕尾工作
一个类里面只有一个,对象被销毁的时候只调用一次。
析构顺序:函数放在栈上,先进后出,所以对后进的函数先进行析构。

this指针
1.this指针是存在于类的非静态成员函数内部的,指向类的对象。但它并不属于对象,不能影响sizeof的结果
2.指针的类型是 类型*const
3.以函数的第一个隐式参数的方式存在于函数内。
4.它在函数调用前生成,调用结束后销毁。生命周期和函数一样
5.当函数的参数个数一定的时候,通过ecx传参,否则等所有参数压栈后压如堆栈。
6.构造函数的初始化列表中不可以使用this指针,因为构建对象还未完成,不知道对象的具体结构。
1.成员变量和成员函数的存储是不一样的,因为多个对象的成员变量是不同的,而他们的成员函数除了变量,都是相同的,为了节省空间,成员函数只存了一份
sizeof(对象),大小为成员变量的大小(考虑对齐),如果函数有virtual修饰的时候,大小还要加4.

thiscal调用约定
1.函数参数从右往左压栈
2.当函数的参数个数一定的时候,this通过ecx传参,否则等所有参数压栈后压如堆栈。
3.函数参数个数不一定,调用结束后调用者清除堆栈,否则,该函数自己清。

友元函数
有元函数不属于类,但是声明在类里面(可以定义在类里面,前加friend,可以定义在类外面,不加friend)
一个友元函数可以是多个类的友元函数
友元函数不能用const修饰(const修饰的函数,变量的成员不可改变)
友元函数和普通函数的调用一样,原理也一样

友元类
声明一个类是另一个类的友元类,那么这个类可以访问另一个类的私有属性的成员变量
注意点:友元类是单向的(a是b的友元类,b不可以是a的友元类);友元类不可传递(a是b的,b是c的,a不是c的);友元类不可继承
优点:提高代码的效率(因为可以直接访问私有属性的对象成员,省去了函数调用的耗时)
缺点:破坏了类的封装性

操作符重载(重载有两种形式,重载为类的成员函数,重载为友元函数,看情况选择)
1.:: . .* ?:不能被重载(除了=外,基类中重载的所有操作符都将被派生类继承)
2.操作符重载函数中必须有一个类类型或者枚举类型变量
用于内置类型的操作符,其含义不能改变,例如:内置的整型+,不能改变其含义
3.重载前后操作符的优先级和结合性是不变的
4、不在具备短求职特性
重载操作符不能保证操作符的求职顺序,在重载&&和||中,对每个操作数
都要进行求值,而且对操作数的求职顺序不能做规定,因此:重载&&、
||和逗号操作符不是好的做法。
5、作为类成员的重载函数,其形参看起来比操作数数目少1
成员函数的操作符有一个默认的形参this,限定为第一个形参。
6、一般将算术操作符定义为非成员函数,将赋值运算符定义成员函数
7、操作符定义为非类的成员函数时,一般将其定义为类的友元
8、== 和 != 操作符一般要成对重载
9、下标操作符[]:一个非const成员并返回引用,一个是const成员并返回引用
10、解引用操作符*和->操作符,不显示任何参数
11、自增自减操作符
前置式++/–必须返回被增量或者减量的引用
后缀式操作符必须返回旧值,并且应该是值返回而不是引用返回
12、输入操作符>>和输出操作符<<必须定义为类的友元函数
13.默认情况下,&和,与内置操作符实现方式一样。=则不会进行重载,而是把每一项进行赋值。
14.重载逗号、取地址、逻辑与、逻辑或等等操作符通常不 是好做法。这些操作符具有有用的内置含义,如果我们 定义了自己的版本,就不能再使用这些内置含义。

static
1.声明为static的类成员(成员数据或成员函数)称为类的静态成员(可用来计算创建对象的个数 )
2.static在类内只是声明,需要在类外定义,类外定义是不带static(static属于类,但不属于对象,所有对象共用)
3.对静态成员的调用方式有两种:(两种方式在底层的实现方式相同)
4.静态成员函数不能访问非静态成员变量(要以把对象对位参数的方式访问)
原因:静态函数中没有this指针(因为static函数是共享的,加this的话并不知道是谁的this)
5.静态成员函数调用方式为_cdcal
6.静态成员和类的普通成员一样,也有public、protected、private3种访问级别,也可以具有返回值,const修饰符等参数。
7.静态成员变量的存储在今天区,和成员函数一样是被各对象共用的。
静态成员函数不可以调用非静态成员函数(没有this指针,只可以访问静态成员)
非静态成员函数可以调用类的静态成员函数()

const
1、const修饰形参,一般和引用同时使用
2、const修饰返回值
3、const修饰类数据成员,必须在构造函数的初始化列表中初始化
4、const修饰类成员函数,实际修饰隐含的this,表示在类中不可以对类的任何成员进行修改
5、在const修饰的成员函数中要对类的某个数据成员进行修改,该数据成员定义声明是必须加mutable关键字
6.c中const修饰的变量为不可修改的变量
c++中,修饰的该变量是一个常量
-构造函数不能通过const来修饰(构造函数是用来初始化对象的,会对成员变量做出修改,并且在初始化列表中,this还没有成型)
-const对象(类型为const Date*const this)可以调用非const成员函数(类型为Date*const this )和const成员函数(类型为const Date*const this) 吗,
不可以,可以(类型匹配问题,非const可能会改变const对象的内容)
- 非const对象可以调用非const成员函数和const成员函数吗,
可以
- const成员函数内可以调用其它的const成员函数非const成员函数吗?
可以,不可以(害怕内容被改)
- 非const成员函数内可以调用其它的const成员函数非const成员函数吗?
可以

版权声明:本文为博主原创文章,未经博主允许不得转载。

c++基础知识总结1

  • 2015年08月04日 11:35
  • 33KB
  • 下载

C++基础知识总结

  • 2017年07月25日 22:58
  • 3.18MB
  • 下载

编程语言系列(二)--C++语言基础知识点总结

                        C++知识点总结:                                                 类的定义特点:     ...

[C++ 面试基础知识总结] 泛型算法

[C++ 面试基础知识总结] 泛型算法 参考书籍:《C++ Primer》 目录 C 面试基础知识总结 泛型算法 目录 基础泛型算法 只读算法 写容器算法 重排容器元素算法 定制操作 向...

C++基础知识易错点总结(3)

第一部分 1. 异步通信和同步通信的区别? 同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可以经过任意长的...
  • fly_yr
  • fly_yr
  • 2016年03月02日 21:50
  • 591

C++基础知识易错点和易混淆总结汇总(不定时更新)

以下是我本人不定时更新的易错点汇总,如需转载,请注明出处。 1、对指针的引用 int a = 10; int *p = &a; //初始化指针p。 int* &pa = p; //这个是对指针p...

C/C++基础知识总结1

一、数据类型

C++ 图基础知识总结

邻接矩阵 int matrix[MAX_VERTEX][MAX_VERTEX] 邻接表 struct Side{ int index; int weight; Side* next; } s...

[C++ 面试基础知识总结] 顺序容器

[C++ 面试基础知识总结] 顺序容器 参考书籍:《C++ Primer》 目录 C 面试基础知识总结 顺序容器 目录 顺序容器与选择 迭代器 容器的初始化和赋值 顺序容器操作 添加元素 访...

C++基础知识: 公有继承,保护继承,私有继承的总结,私有继承的用意何在

今天被问到C++中私有继承的作用是什么?第一反应是关于访问权限的改变,基类被子类私有继承后,基类中即使是共有public,保护protected的成员变量或者成员函数都会在子类中变为私有成员和私有成员...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++基础知识总结
举报原因:
原因补充:

(最多只允许输入30个字)