本周开始了C++的课程,学习了四天C++的知识,学习了C+的基础命令与定义等,对C++的知识有了最基础的了解。C++是C的增强版,在C的基础上增加了很多的新内容,使得C++编程相比于C来说简单,方便了不少。C更多的是面向过程,c++是面向过程+面向对象,面向对象是通过面向过程来实现的。
引用与指针的区别:指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化。
★ 相同点:
1. 都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
★ 区别:
1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”
4. 引用没有 const,指针有 const,const 的指针不可变;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;typeid(T) == typeid(T&) 恒为真,sizeof(T) == sizeof(T&) 恒为真,但是当引用作为类成员名称时,其占用空间与指针相同4个字节(没找到标准的规定)。
7. 指针和引用的自增(++)运算意义不一样;
函数重载:功能类似,函数名相同,参数不同,与返回值无关。看是调用那个参数,是通过函数名来找到的。
C++调用C库的函数时,需要在“.h”文件中加入“extern "C"”,来刚告诉g++,以下函数是外部的C库函数,不需要重命名。
访问限定符:
Public修饰的成员既可以在类内被访问,也可以在类外被访问
Private和protected修饰的成员只能在类内被访问
类:描述一类事物的属性和行为的自定义的数据类型。
对象:用类这种自定义的数据类型定义的变量,类的数据类型(定义数据类型系统不会分配空间)是抽象的,对象是具体的实体(定义变量会分配空间),所以:用类的数据类型定义变量的过程叫实例化对象。
封装:把一类事物的属性和行为用类这种自定义的数据类型包起来,把需要隐藏的隐藏起来,把可以暴露的暴露出来。
构造函数:给成员变量初始化的。
1.没有定义时,系统提供的。2.自定义了,无参的构造函数。3.自定义了,有参的而且所有参数都有默认值的构造函数。
析构函数:当一个对象生命周期结束的时候,系统会自动调用析构函数,如果没有定义,系统提供,如果定义了,系统就不提供了。用来回收资源,比如在构造函数中在堆区申请空间,在析构函数里去释放。
static函数必须在类内声明在类外定义,先于对象而存在,一个类只有一份,所有对象共享,不占某个对象内存空间大小,在类外可以直接通过类名加作用域的方式进行访问。
const函数修饰为只读文件,const修饰的成员函数中不能修改任何成员变量的值,const看似在修饰成员函数,实则是在修饰这个成员函数的第一个形参this,常成员函数只能调用常成员函数。
友元:打破了封装,私有的或者受保护的成员只能在类内被访问不能在类外被访问,如果确实是需要访问私有的成员,就需要留公有的接口来访问。
运算符重载。如果某一种数据类型也想要实现某运算符,就需要进行对某运算符的重载。
运算符重载函数的定义:
返回值 operator运算符(形参。。。)
{
}
运算符重载函数的实现:
- 成员函数 有this指针,可以少定义一个形参
- 友元函数 没有this指针
模板:可以在文件中写好一个模板,然后再另一个文件中来生成模板函数,来对函数进行操作,优点是不会占用代码段空间。