C/C++语言复习二

7 篇文章 0 订阅
4 篇文章 0 订阅

1,引用

引用初始化时,将引用和初始值绑定在一起,而不是将初始值拷贝给引用,一旦初始化完成,引用始终和初始值绑定在一起,无法重新绑定,因此,引用必须初始化。

引用即别名,引用并非对象,对其进行的所有操作都是在与之绑定的对象上进行的;

引用本身不是对象,因此不能定义指向引用的指针,但指针是对象,所以存在对指针的引用。

引用做函数形参可以避免拷贝,如果函数无需改变引用形参的值,最好将其声明为常量引用。不要返回局部对象的引用和指针。

2,访问控制

public:成员在整个程序内可被访问,定义类的接口;

private:成员可被类的成员函数访问,不能被使用该类的代码访问;

protected:成员与派生类分享,不被其他共有访问。

友元:类可以允许其他类或其他函数访问它的非公有成员,方法是令其他类或函数成为它的友元。

类的静态成员必须在类外初始化。

3,构造函数

拷贝构造函数调用情况:1,将一个对象作为实参传递给一个非引用类型的形参;2,从一个返回类型为非引用类型的函数返回一个对象;3,用花括号列表初始化一个数组中的元素;4,用=定义变量时;

需要析构函数的类也需要拷贝和赋值操作,(拷贝构造函数和赋值运算符重载);

4,继承:面向对象中的继承指类之间的父子关系  

1、子类拥有父类的所有成员变量和成员函数

2、子类就是一种特殊的父类

3、子类对象可以当作父类对象使用(赋值兼容性原则)

4、子类可以拥有父类没有的方法和属性

子类的构造函数调用顺序:先构造父类,再构造成员变量、最后构造自己;先析构自己,在析构成员变量、最后析构父类。

访问控制:public继承(public,protected,private);protected继承(protected,protected, private);private继承(private,private,private)。

友元关系不能被继承;某个类的友元类的基类或派生类不具有像友元类的特殊访问能力;

静态成员不能被继承;

5,多态:一个函数在一个类族中穿梭时,表现出不同的行为;

成员函数若为虚函数,则执行动态绑定;否则,其解析过程发生在编译时而非运行时。

多态成立的三个条件

要有继承

要有函数重写(虚)

3、父类指针(父类引用)指向子类对象

如果想通过父类指针 执行 所有的子类对象的析构函数,那么需要在父类析构函数前加上virtual关键字;

多态是每个类用了一个虚表,每个类的对象用了一个虚指针。指向派生类的虚函数表。

6, 函数重载:必须在同一个类中进行;子类无法重载父类的函数,父类同名函数将被名称覆盖;重载是在编译期间根据参数类型和个数决定函数调用。

函数重写:必须发生于父类与子类之间;并且父类与子类中的函数必须有完全相同的原型;使用virtual声明之后能够产生多态(如果不使用virtual,那叫重定义)

多态是在运行期间根据具体对象的类型决定函数调用。

7,函数模板 

― 编译器并不是把函数模板处理成能够处理任意类型的函数

― 编译器从函数模板通过具体类型产生不同的函数

― 编译器会对函数模板进行两次编译

―在声明的地方对模板代码本身进行编译

―在调用的地方对参数替换后的代码进行编译

8,vector的内存管理

为支持快速随机访问,vector将元素连续存储;

当不得不获取新的内存空间时,vector和string的实现通常会分配比新的空间需求更大的内存空间;

将已有元素从旧位置移动到新空间,然后添加新元素,释放就存储空间;

size指容器当前拥有的元素个数;而capacity则指容器在必须分配新存储空间之前可以存储的元素总数,也可以说是预分配存储空间的大小。

resize和reserve的区别:

1,resize分配的空间都已初始化,可以访问;reserve分配的空间没有初始化;

2,resize调整容器的长度大小,使其能容纳n个元素。如果n小于容器的当前的size,则删除多出来的元素。否则,添加采用值初始化的元素。

调用reserve(n)后,若容器的capacity<n,则重新分配内存空间,从而使得capacity等于n。如果capacity>=n呢?capacity无变化。


9,非静态成员函数后面加const

(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为 const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);唯一的例外是对于 mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调 用。

10,

常量和引用,必须通过参数列表进行初始化。

静态函数中不能出现this指针静态函数属于类本身,不与类绑定,因此不能用this指针。
静态成员变量必须在类外初始化,静态成员常量在类中初始化。
在类定义时,无法使用构造函数,因而无法完成对象的初始化;一般成员变量需要在类内进行初始化

11,函数模板的本质
编译器的两次编译:第一次,先将模板编译一遍,第二次,根据程序调用的不同版本分别为其生成对应的函数版本。
12,模板类中若使用友元函数,要将函数体直接写在函数声明下。分开写有错误。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值