1 C到C++
1.1 指针与引用
一、 指针
- 指针在使用之前必须初始化 野指针的指向是无法控制的
- 指针变量所占的空间大小相当于一个整型变量的大小(随着机器改变 32位机中占4个字节)
二、 引用
1.2 名字空间
namespace
在使用变量前要确定其所在位置–影响变量的生存周期
1.3 字符串与string类
- 字符串是以数组形式存放数据的 最后一位是空白结束符0 所以字数组长度比字符串长度多一
字符串的相关操作都是通过C中的库函数实现的 如:char* strcpy(char* str1, char* str2);为什么使用指针操作str呢?
1.int类型的数据是如何存放的char* str1; //只是声明str1 因为没有相对应的内存 所以使用strcpy无法存储 char* str2 = new char[5]; //str2指向一个5个char大小的内存空间
- string在C++中的使用https://blog.csdn.net/Wchenchen0/article/details/81042596
- string是由STL提供的string类 在声明后 会根据输入数据的大小自动分配内存大小
- string 在使用时 应在文件开头带上头文件 #include 其中包含默认构造函数 可以直接对string对象进行初始化操作
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1;
s1="chenchen";
cout<<s1<<endl; //chenchen
string s2(s1);
cout<<s2<<endl; //chenchen
string s3("value");
cout<<s3<<endl; //value
string s4(10,'c');
cout<<s4<<endl; //cccccccccc
return 0;
}
- 什么时候使用string类
1.4 变量
- 存储
- 传递方式
1.5 函数
- C++中函数参数的意义不仅仅是某个类型的变量 很多时候是指向数据流的一个窗口,或者数据集合以及一组相关的操作,也就是对象。
- max(a,b); 是可以直接调用的函数
进程空间 | 存放内容 |
---|---|
代码区 | 存放代码块 |
全局数据区 | 全局数据、常量、文字量、静态全局变量、静态局部变量 |
堆区 | 程序中产生的动态内存 |
栈区 | 函数数据(即局部变量)先进后出 |
可执行程序文件装载到计算机内存中才能运行
1.6 函数重载
函数是全局的,不能重名
参数的类型,数量,形参的类型、数量、排列顺序
参数个数不同
参数类型不同
参数顺序不同
注意:返回值类型不能作为区分同名函数的条件,因为在匹配函数时只根据参数来匹配函数,而不关注函数的返回值
1.7 extern关键字
- 用于声明外部成员函数、成员数据
- 可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇
到此变量和函数时在其他模块中寻找其定义。另外,关键字 extern也可用来进行链接指定
感觉非常难受 自己不知道该从哪里下手去学习C++ 果然不该随意放纵自己 导致现在什么都不会 啥都不知道
2 类和对象的创建
2.1 类
声明一个结构体相当于自定义一个新的变量类型 后面可以使用此类型声明新的变量
- 类是一个泛称,是一个抽象概念 ;而对象是一个具体概念
将多个对象的共同之处提取出来所得到的共同部分就是类
2.2 构造函数
一匹配 二传递 三构造数据成员 四执行构造函数的函数体
为什么说先构造数据成员 再执行构造函数的函数体呢?成员不是再函数题中声明的吗?
- 特征:
构造函数的名字与类名相同
不具有任何返回值 void也不行,没有类型 - 每当创建对象时,需要添加初始化代码时,则需要定义自己的构造函数;而对象撤销时,需要自己添加清理工作的代码时,则需要定义自己的析构函数
2.3 析构函数
3 类和对象的使用
vector容器
- 可以存放任意类型的动态数组
!4 运算符重载
!5 继承和派生
5.1 继承
- 子类可以根据通过继承方式(public/private)得到父类的一些特征 但是注意
- 例题:B隐式转化为A
· class B:public A{} 类 B公有继承自类 A,因此,类 B能隐式转换为类 A
· class B{operator A();} C++中 operator有两个作用:运算符重载和类型转换函数。下面主要介绍类型转换函数,它有如下几个特点:
①函数定义在类中。
②用 operator来修饰,被修饰的函数名为待转换的目弊钹型。
③函数没有参数和返回值,但是函数体内有 return语句。 class B{operator A();}就是一个转换函数,用来把 B类型的对象转换为 A类型的对象,
· class A{A(const B&);}类 A实现了参数为 B的构造函数, B能隐式转换为 A
· 但 class A:public B{} 不能隐式转换,类 B是类 A的父类,子类包含了父类部分,子类可以转换为父类,但父类没有子类额外定义的部分,是不能隐式转换成子类的
5.2
!6 多态性与虚函数
6.1 虚函数virtual
- 虚函数指一个类中希望被重载的成员函数,当使用一个基类指针或引用指向一个继承类对象的时候,调用一个虚函数时, 实际调用的是继承类的版本
- https://www.cnblogs.com/weiyouqing/p/7544988.html
6.2 基类
- 什么时候使用基类指针?
7 文件系统
7.1 文件输入输出流
ofstream是输出流 是将数据输入文件 还是将文件中的内容读出至程序中
1. 如何判断引用?2. 所谓容器是什么?是用来承载具体对象的载体吗?3. vector是什么?将它理解为容器?还是指针?如果是容器的话 和链表有什么区别?4.this指针的使用方法http://blog.chinaunix.net/uid-21411227-id-1826942.html 5.string类总结https://www.cnblogs.com/X-Do-Better/p/8628492.html 6.基类指针https://zhidao.baidu.com/question/335978078.html 7.