c++核心编程学习笔记

c++核心编程学习笔记

一、内存分区模型

代码区:存放函数的二进制代码,由操作系统进行管理

全局区:存放全局变量、静态变量以及常量

栈区:由编译器自动分配释放,存放函数的参数值以及局部变量等

不要返回局部变量的地址。

堆区:由程序员分配和释放,若程序员不释放,程序结束时由惭怍系统回收。在c++中主要利用堆区开辟内存。

不同区域存放的数据,赋予不同的生命周期,可以使编程更加灵活。

二、引用

引用的作用给变量取别名。语法: 数据类型 &别名=原名。

引用必须初始化,初始化后不可改变。

引用做函数参数,可以简化指针修改实参。

不要返回局部变量的引用。这种情况下函数调用可以作为左值。

引用的本质在c++中的内部实现是一个指针常量。

常量引用主要用来修饰形参,防止误操作。

三、函数提高

在c++中,函数的形参列表中的形参是可以有默认值的。语法:返回值类型 函数名(参数=默认值)。

c++中函数的形参列表里是可以有占位参数的,用来占位,调用函数时必须填补该位置。

语法: 返回值类型 函数名(数据类型)

函数重载:函数名可以相同,提高复用性。1同一作用域下2函数名称相同3函数参数类型不同或个数不同或顺序不同

四、类与对象

1、封装

c++面向对象的三大特性:封装,继承,多态。

封装的意义是将属性和行为作为一个整体,表现生活中的事物,将属性与行为加以权限控制。

语法:class 类名{访问权限:属性/行为};

类在设计时,可以把属性和行为放在不同的权限下,加以控制。

访问权限有三种:public公共权限(类内外都可以访问)、

protected保护权限(类内及子类可以访问,类外不可以访问)、

private私有权限(类内可以访问,子类及类外不可以访问)

在c++中struct与class唯一区别就在于默认的访问权限不同。区别:struct默认公共,class默认私有。

成员属性设置为私有的优点:可以自己控制读写权限;对于写权限,我们可以检测数据的有效性。

2、对象的初始化和清理

对于对象没有初始化以及用完后没有及时清理的问题。c++利用了构造函数和析构函数解决上述问题。这两个函数会被编译器自动调用,以完成对象初始化和清理工作。 我们不提供的话,编译器也提供,但所提供的构造函数和析构函数是空实现。

构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无需手动调用。

析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作。

构造函数语法:类名(){}   函数名与类名相同,可重载,无返回值。无需手动且只调用一次。

析构函数语法:~类名(){} 函数名与类名相同,无返回值,五参数,不可重载,无需手动且只调用一次。

c++中拷贝构造函数调用时通常有三种情况:使用一个已经常见完成的对象来初始化一个新对象;值传递的方式给函数参数传值;以值方式返回局部对象。

默认情况下,c++编译器至少给一个类添加3个函数:无参构造函数,无参析构函数,拷贝构造函数。

若有有参构造函数,则编译器不创造无参构造;若有拷贝构造函数,则编译器不创造拷贝构造函数。

浅拷贝是简单的赋值拷贝;深拷贝是再堆区重新申请空间,进行拷贝操作。

初始化列表,作用:c++提供了初始化列表语法,用来初始化属性。语法:构造函数():属性1(值1),属性2(值2)...{}。

c++类中的成员可以是另一个类的对象,称为对象成员。

静态成员函数,所有对象共享同一个函数,静态成员函数只能访问静态成员变量。

3、c++对象模型和this指针

在c++上,类内的成员变量和成员函数分开存储,只有飞静态成员变量才属于类的对象。

this指针是隐含每一个非静态成员函数的一种指针。无需定义,直接使用。this指针指向被调用的成员函数所属的对象。

this指针的用途:当形参和成员变量同名时,用this指针来区分;在类的非静态成员函数中返回对象本身,可使用return *this

c++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针。

const修饰成员函数称为常函数,常函数不可以修改成员属性,成员属性声明时加关键字mutable后,在常函数中依然可以修改。

声明对象前加const称为常对象,常对象只能调用常函数。

4、友元

在程序中,有些私有属性也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。

友元的目的就是让一个函数或者类访问另一个类的私有成员。关键字:friend

友元的三种实现:全局函数做友元;类做友元;成员函数做友元。

5、运算符重载

对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

6、继承

利用继承技术,可以减少重复代码。

继承的基本语法:class 子类:继承方式 父类

继承方式一共有三种:公共继承,保护继承,私有继承。

继承中构造和析构顺序:子类继承父类后,当创建子类对象,也会调用父类的构造函数。

继承同名的成员处理方式,访问子类同名成员直接访问即可,访问父类同名成员需要加作用域。

继承同名静态成员处理方式,与上述处理方式一样。

多继承语法,c++允许一个类继承多个类。

class 子类:继承方式 父类1,继承方式 父类2........

多继承可能会引发父类中同名成员出现,需要加作用域区分,实际开发中不建议用多继承。

菱形继承即两个派生类继承同一个基类,又有某个类同时继承者两个派生类,又叫钻石继承。

7、多态

多态分为两类,静态多态:函数重载和运算符重载属于静态多态,复用函数名;动态多态:派生类和虚函数实现运行时多态。

两者的区别:静态多态的函数地址早绑定-变异阶段确定函数地址;动态多态的函数地址玩绑定-运行阶段确定函数地址。

动态多态满足条件:有继承关系,子类要重写父类的虚函数。

重写:函数返回类型、函数名、参数列表完全相同。

 

五、文件操作

程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放。通过文件可以将数据持久化。

c++中对文件操作需要头文件<fstream>

文件类型:文本文件:文件以文本的ASCII码数据存储在计算机中;

二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接去取读懂它们。

操作文件的三大操作:ofstream:写操作;ifstream,读操作;fstream,读写操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值