c++ 学习笔记(基础+封装)
文章目录
博主是大二学生,刚开始学习没多久,有啥错误希望大家评论,共同进步。
名字空间就是: 隔离, 避免变量名,函数名重复。 因为程序中使用相同的名字会报错, 所以在c++中有了名字空间, 用来隔离相同的名字。
引用(reference) 是c++对C语言一个很重要的扩充,
引用就是一个对象或者变量的别名, 对引用的操作跟对其绑定的变量或者对象的操作方法完全等价。
-
& 不是取地址运算符只是起到标志作用。
-
引用的类型必须与他绑定的变量类型一样
-
声明一个引用的同时必须初始化
-
引用相当于变量或者对象的别名, 初始化之后不准修改
-
引用不能单独存在
好处是不用复制大的对象。
类型 *&指针引用名 = 指针
引用做函数参数:
const:
代码示例:
权限小的 接受一个权限大的可以
int consst a = 3; int * p = &a;(×)
解析:指针指向const修饰的变量时,应该是const int const *p = &a;
函数的特性:
在同一个作用域下, C语言不允许出现相同名字的函数。
c++:特点一:函数重载:在相同的作用域中, 函数名相同,参数表不同的函数,构成重载关系。
两个要素是:一个是函数名,一个是参数列表,跟参数没关系。
特点二: 缺省参数, 不传参数,就使用默认值。
内联函数关键字:inline
内联函数:内联编译是建议性的,由编译器决定。
逻辑简单,调用频繁的函数建议使用内联。
递归函数无法成为内联函数。
int * p = new int[]; 申请内存块
delete []p; 释放内存块
new 分配
delete 释放
如果指针未申请内存, 就直接使用,操作系统无法提供资源,会产生空指针异常。
学习面向对象 就知道new 不仅会分配空间, 对类 还会调用构造函数
delete 类对象 会默认调研析构函数
对象是具体的事物 ,而类是从对象中抽象出来的
public:
protected:
private:
对象成员的访问:
c++初始String:
属性封装之初始封装:
可以对传进去的值进行限制作用
同文件外定义:
对象结构:
class 类名
{
类名 (形参表)
{
构造函数体
}
成员变量
成员函数
public:属于类的对象可以直接调用
private:只能在内部调用
protected:继承,子类才可以调用
}
初始化列表优先于构造函数执行,初始化列表只能用于构造函数,初始化列表可以同时初始化多个数据成员。
构造函数不能初始化const限定的值, 但是初始化列表可以。
一个类可以没有默认构造函数,有别的构造函数也可以。
当构造函数没有参数时也叫默认构造函数。
当构造函数有参数,但每个参数都有默认值时,也称为默认构造函数。
当实例化对象时,如果不使用任何参数,则调用的是默认构造函数。
构造函数总结:
拷贝构造函数的参数是确定的,不能重载。
当没有自定义的拷贝结构函数时,系统自动生成一个拷贝构造函数。
通过同类型的对象实例化另外的对象时,自动调用拷贝构造函数。
拷贝构造函数没有返回值。
析构函数不允许加任何参数,这个和构造函数不一样。
析构函数是用于释放类中分配的内存。
如果没有自定义的析构函数则系统自动生成。
析构函数在对象销毁时自动调用。
析构函数没有返回值, 没有参数也不能重载。
如果没有自定义的析构函数则系统产生一个析构函数。
堆中对象销毁时,析构函数被自动调用。
栈中对象销毁时,析构函数被自动调用。
析构函数没有参数,也没有返回值。
梳理知识:
对象数组:
实例化对象数组时,每一个对象的构造函数都会被执行。
实例化对象数组时,内存既可以从堆上分配,也可以从栈上分配。
销毁对象数组时,每一个对象的析构函数都会被执行。
堆中实例化的数组需要手动销毁释放内存,在栈中实例化的数组,系统自动回收内存。
实例化对象A时,如果对象A有对象成员B, 那么先执行对象B的构造函数,在执行A的构造函数。
如果对象A中有对象成员B,那么销毁对象A时,先执行对象A的析构函数,在执行对象B的析构函数。
如果对象A中有对象成员B,对象B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B。
(如果对象A中有对象成员B,对象B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B(原因:因为实例化A时,会先执行B的构造函数,再执行A的构造函数,如若对象B没有默认构造函数,即需要给B的构造函数传递参数才能调用,但是此时A的构造函数还没有执行,因此它还拿不到A构造函数的参数,所以先调用B的构造函数这个过程将无法进行。而初始化列表会先于构造函数的执行对对象成员进行初始化,因此不必再担心B的构造函数拿不到参数而无法执行的问题。因此如果B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B.)
``
浅拷贝:浅拷贝的原理就是把值直接赋值过去。
深拷贝:将传进来的内存拷贝到分配的内存中
this指针就是指向数据自身的指针。
this指针无需用户定义,是编译器自动产生的。
对象各自的this指针指向各自对象的首地址,所以不同对象的this指针一定指向不同的内存地址。
当成员函数的参数或者临时变量与数据成员同名时,可以使用this指针区分同名的数据成员。
this指针也是指针类型,所以在32位编译器下也占用4个基本的内存单元,即sizeof(this)的结果为4.
只有使用常对象才能调用常成员函数。
常对象只能调用常成员函数,不能调用普通成员函数。
普通对象能够调用常成员函数,也能够调用普通成员函数。
常指针和常引用都只能调用对象的常成员函数。
对象引用和对象常引用都是对象的别名,一个对象可以有多个对象引用。
后面的内容找时间在跟新吧,毕竟到了期末要复习了。