c++对象相关笔记

本地变量(参数)作用域

跟函数有关,只能在函数中使用

所有成员变量

前有个隐藏的this,this为一个指针,为该对象的地址

构造函数

没有返回类型,与类的名称一模一样,当对象被创造时调用,可以有参数

析构函数

没有返回类型,与类的名称一模一样,当对象被结束时调用,区别为在函数前加"~",不可以有参数

结构体

c++结构体可以有构造函数,但有构造函数的时候,就不能用普通的c语言定义结构体方法给它赋初值,只能用构造函数

default construct(默认构造函数)

没有参数的就叫默认构造函数,包括自己定义的没有参数的构造函数

new and delete

new运算符的返回值为地址,new时先给空间再初始化,delete是先析构,再收回空间
举例:int * psome= new int [10]
此时使用delete [] psome 来表示删除这连续10个int空间,不带[]的话则表示只析构第一个
但是,此时也删除了这连续的10个空间,但是没有析构其余9个int,带[]则析构了全部
##不要用delete去释放不是new出来的空间(在分配的表中没找到那一项)
##delete一个空指针是安全的

private ,protect ,public

private的作用域只在类内,注:同一类的对象可以相互访问,只在编译时检查
protect的作用域为类及类的子孙
public的作用域为其余函数都可以访问

friend

可以访问其的private变量,只在编译时候检查

class vs struct

class没有声明访问属性,默认为private
struct默认为public

初始化列表

在构造函数前执行,推荐使用初始化列表初始化,不要在构造函数中赋初值,在构造函数初始化则意味着,它必须有默认值,因为在构造函数中赋初值,相当于已经赋初值了两次,,构造后一次,初始化一次
成员变量初始化需要在这,父类的初始化也需要在这
同时顺序是按声明的顺序开始执行的
最先为父类,再按类中声明的成员变量顺序开始初始化

对象组成

组合

拿其他对象拼装出一个类,在成员变量中有其他类的对象

继承

拿已有的类,在已有的类上进行修改,从而有一个新的类
构造时,先构造父类,再构造子类
析构时反过来
在子类定义一个父类已有的方法,此时这个方法与父类无关(其他重载的不同参数的函数都不能用)
其他语言则为overwrite 为父类的替代品

接口与方法

接口是类的方法中public的部分,即对外公开的部分(个人理解)

函数缺省值

建议不要使用

内联函数(inline)

相当于把函数代码搬到使用的地方,编译时,并不产生这个函数的代码
要在.h中声明并定义
会增加程序代码,空间换时间
比宏定义要好,可以类型检查
成员函数在类声明时就给出body即为内联函数
适用范围:比较小,两三行或者频繁调用
不适用范围:递归和非常大的函数不可以为内联函数

const

const 在 * 之前,意思为不能通过该指针变量去修改值
const 在 * 之后,意思为不能修改该指针的值(即所指向的地址)
在函数后面写了const 意味着this是const

.h和.cpp

当DLL/LIB中已经实现头文件中的函数,类时,只引用h就可以了,否则h和cpp都得引入工程(暂时理解,以后继续补充)

引用

变量的别名。
定义规则:类型& 变量名= 原变量
若在引用前+const 则不能用引用去改变原变量的值
特点:
1.不能是null
2.必须依靠一个变量,是变量的别名
3.不能更改为新的变量的别名
4.不能将其他引用作为右值
5.实际为const 指针

向上造型

把子类当成父类使用

多态

虚函数
有虚函数的类比普通类大,一般为一个int型变量大小(地址)
该变量(vttr)指向一个表(vtable),该表存放着该类的虚函数的地址,所有该类的对象的表的地址相同(一般为该对象的第一个int大小范围)
如果类中有一个virtual函数,那么析构函数应为virtual函数

const & 在函数参数中的优点

1.不用改变那个对象
2.通过传递地址而不是传递变量本身
3.防止其被改变

拷贝构造

构造函数

也可以用等号+某个值,不用圆括弧

拷贝函数

默认

类中的成员变量的拷贝,全部复制,指针也会被拷贝,地址相同,引用也会被拷贝,指向同一个变量

自己定义

新增加一个构造函数,参数为const 本身对象&
就可以自己控制拷贝时的细节
如果不+const和&,会陷入死循环,在传参时会发生一次拷贝构造,拷贝时又发生,循环反复

定义一个类后应该要定义的3个函数

1.默认构造函数 2.虚构造函数 3.拷贝构造函数

静态对象

两个作用

1.持久存储(不依赖某个对象而存在)
2.访问性受局限(隐藏)

static的用法

Static free function – 过时
Static global variables – 过时
Static local variables – 持久存储
Static member variables – 被所有实例共享
Static member function – 被所有实例共享,且只能接受Static变量

用法

静态的成员变量要找个cpp去放这个变量,不然只是在类中声明,而不是定义
静态的成员函数不能有非Static变量的原因是因为它没有this

全局变量

全局变量的构造函数在main之前,析构函数在main函数结束时或者调用了exit()
全局变量初始化顺序是无序的

重载运算符

成员函数

this为其第一个参数

用法

const Integer operator+(const Integer& n) const {}

第一个const作用为防止其为左值
第二个const表示参数不会被修改
第三个const表示this不会被修改

是否作为成员

双目一般作为非成员,单目部分(=,(),[],->,->*)一定要作为成员

模板

是一个声明,使用函数时会先检查是否有匹配的函数,再检查是否有匹配的函数模板

函数模板

类模板

异常处理

构造函数中抛异常,不会调用析构函数,也得不到这个对象,但是内存已经分配

笔记

1

如果两个函数参数相同,返回类型不同是不能重载的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值