C++ 基础小节

一、C++ 关键字

主要是新增的:

asm:用于在C、C++程序中嵌入汇编程序
bool wchar_t是C++新增的基本数据类型(10个基本类型)
try{}catch(异常类型){}   被动捕获异常
class 声明类,在模板中说明类型
const:常引用,常对象,常函数
const_cast(常类型转换),reinterpret_cast(重定义类型转换),static_cast(静态类型转换),dynamic_cast(动态类型转换):标准类型转换
new,delete,new[],delete[]:用于C++申请和释放堆内存,相当于malloc(),free()
enum:C中的枚举类型要求不严格,C++中对枚举类型要求严格:只能用枚举常量值为枚举型变量赋值,不能用其它类型
explicit: 用于修饰构造函数,禁止隐式类型转换
true,false:C++中bool型变量的值常量
friend:C++中说明友元函数,友元类时使用
inline:C++中新增的函数特性:内联函数
mutable:C++类中声明的活跃数据成员
namespace:用于声明或使用命令空间
operator:C++操作符重载
public(公有),protected(保护),private(私有):C++新增的数据访问权限类型和 继承类型
struct C++中不是说明结构体,则是用struct声明的类
template:模板,用于说明模板函数和模板类
this:C++中内置一个永远指定本类对象的指针,只能在类内使用,不能在类外使用
throw:C++中主动抛出异常
typeid:用于获取类型标识id  gnuC:typeof(num);获取某变量的类型int num;       typeof(num) num2;
typename:用于模板中说明类型
using:C++中新增使用命名空间声明
virtual(虚,虚函数):C++中核心关键字,动态联编,抽象类

二、命名空间

1.命名空间的作用:为了防止命名冲突;
2.命名空间声明:
    namespace 命名空间名 {
                  空间成员;
                  }
3.命名空间的使用方法:
    1) 全路径:命名空间名::成员员;
    2) 使用using语句: using 命名空间::成员名;  只能使用指定的一个成员
    3) 使用: using namespace 命令空间名;      在此命名空间的所有成员都可直接使用

三、标准输入输出类型

1.C++中的标准输入,输出等
        类型                                C标准IO库                系统IO库
extern istream cin;     标准输入(键盘)        stdin(FILE *)           STDIN_FILENO(int)
extern ostream cout;    标准输出(显示屏)      stdout(FILE *)          STDOUT_FILENO(int)
extern ostream cerr;    标准错误(显示屏)      stderr(FILE *)          STDERR_FILENO(int)
extern ostream clog;    标准日志
2.使用C++标准输出cout对象,不需要格式化字符,原因是重载了不同类型的<<操作符
ostream & operator << (ostream & out,int num);
ostream & operator << (ostream & out,float num);
ostream & operator << (ostream & out,const char *s);
ostream & operator << (ostream & out,const string &s);

1.C++标准输入:cin
2.重载了不同的>>
istream & operator >> (istream &in, int &num);
istream & operator >> (istream &in, float &fnum);
istream & operator >> (istream &in, char *&str);
istream & operator >> (istream &in, string &s);
istream & operator >> (istream &in, Student &s);    //没有定义,所以不能直接输入Student
3.C标准IO中的scanf(),printf()带缓冲区; cin,cout也带缓冲区

四、C++ 新增运算符

1. ::域作用符 命名空间::成员;  类名::成员
2. typeid 获取某变量的类型标识    跟C中的typeof(变量名)类似gnuC   int a;  typeof(a) b;
3. new和delete,new[]和delete[] 申请堆内存,与C中的malloc()、free()
        1) new用于创建对象指针,delete用于释放对象指针指向的堆内存
        2) new[]用于创建对象数组,delete[]用于释放对象数组的堆内存
4. .* ->*用于通过指向类中的成员指针访问成员
5. throw用于主动抛出异常
6. typeof()返回变量的类型     typeid返回typeinfo对象
7. new、delete与malloc(),free()的区别:
    1) new,delete是操作符,malloc(),free()是函数;
    2) new会自动调用构造函数,delete会自动调用析构函数,而malloc()和free()不会自动调用

五、数组相关

1.静态数组:int arr[5];数组占用内存大小在编译时就确定;
2.动态数组:C: int *p = malloc(5 * sizeof(int));  C++: int *parr = new int[5];
3.柔性数组:定义
       struct craarray
       {
            int count;      //必须有其它成员;
            int array[0];   //柔性数组的最后一个成员必须为数组,
       }

六、引用相关

1.引用的声明: 类型 &引用名 = 初始化值;    int &ref = num; 此&作类型说明符,说明ref是引用,类型为 int &;
2.引用的使用与变量的使用方式相同,(引用就是变量的别名);
3.引用的特性:
    1)引用声明时必须初始化
    2)引用的绑定关系不可更改(终身制)。
    3)访问引用的值实际访问的是引用所引用变量的值
    4)对引用取地址实际是对引用所引用的变量取地址(C++没有提供获取引用自身地址的方式),
4.引用的类型与所引用变量的类型要一致;
5. 引用与指针的区别:
    1) 声明时指针可初始化可不初始化,引用必须初始化
    2) 指针的指向关系随时可变,引用的绑定关系永远不变
    3) 引用不占用内存空间,指针需要占用4/8字节,取决于系统
    4) 有void指针,没有void引用,有指针引用,没有引用指针
6.引用的本质:是指针常量
         1) 指针常量声明时必须初始化
         2)不能修改指针常量的指向
7.区别在于编译器碰引用访问值时会自动加*
8.引用的作用:主要用于作参数;
        1) 一般类型作参数: 优点:声明、实现、调用都简单, 缺点: 不能修改实参的值。占用更多内存,执行效率低。
        2) 指针作参数:优点:能修改实参的值,节省内存,执行效率高,缺点: 声明、实现、调用稍复杂,
        3) 引用作参数:优点:能修改实参的值,节省内存,执行效率高,实现和调用简单,缺点:声明稍复杂;

七、内联函数相关

C++新增函数特性:
1.一般函数的优点:会参数类型检查更安全, 缺点:执行效率低,创建函数栈(函数内的局部变量,形参调用时,返回值),销毁栈;
2.带参宏的优点: 优点:执行效率高,不会创建和销毁函数栈, 缺点: 没有参数类型检查,不安全
3.内联函数: 优点:参数有类型检查,更安全,在调用时不会当作函数,而是将函数体中的内容替换掉调用处,不需要创建和销毁函数栈,效率也高
4.内联函数的限制:不能超出限制,否则当作一般函数执行
    1) 内联函数不能超过5行;
    2) 不能有循环和swich语句;
    3) 不能主动抛出异常throw;
    4) 递归函数不能是内联函数;

八、函数重载相关

C++新增函数特性:
1.C语言中不允许在同一作用范围中函数名相同;
2.(overload)函数重载:
        1)在同一范围中(在同一文件中或同一类中)
        2)允许函数名相同
        3)但参数不同(参数的类型不同,参数的个数)
3.重载时所调用的函数由实参(实参类型或实参个数)决定,如果参数类型不一致会隐式类型转换为形参类型,但如果不能自动转则编译出错
4.函数重载时要注意:
  1) 返回值不能作为区分重载的依据
  2) 防止可能造成二义性错误的情况

九、缺省函数相关

C++新增函数特性:
1.函数缺省值: 形参名右边 = 默认值;(常使用缺省值尽量设置到右边,常设置的数据尽量设置到左边)
2.好处:1) 调用方便
3.函数缺省值注意: 
      1) 定义含有缺省值的函数时必须按从右向左的顺序(右边有缺省值,则左边才能有);                      2) 调用含有缺省值的函数时必须按从右向左的顺序(右边设置了缺省值,则左边才能设置缺省值)
      3) 定义和调用含有缺省值的函数时要防止二义性错误

10、类相关

1.this是关键字:在C++中表示指向本类对象的指针,内部定义;
2.struct声明的类与class声明的类的区别: 
      1) class声明的类默认访问权限是private私有的,struct声明的类默认访问权限是public公有的
3.面向对象编程:三大特征:封装,继承,多态;
4.定义类: class 类名{
        访问权限:
                 数据成员类型1 数据成员1;
                    ...
                成员函数1;
                    ...
                 };
5.定义类时不占内存,而在创建对象时分配内存
6.把事物的属性封装成类的数据成员,把事物动作封装成类的成员函数;

11、对象及内存分配

1. 对象的创建及初始化:声明类时不占内存,创建对象时才分配内存
    1)一般对象: 类类型 对象名;
    2)对象指针:a.在栈中的对象指针: 类类型 *对象指针名; b.在堆中的对象指针:类类型 *对象指针名 = new 类类型;
    3)对象数组:a.在栈中的对象数组: 类类型 数组名[成员个数]; b.在堆中的对象数组: 类类型 *数组名 = new 类类型[成员个数];
    4)对象引用: 类类型 &对象引用 = 对象名;
2.对象访问数据成员或成员函数的格式:
    1)   一般对象名.成员;
    2)   对象指针->成员;
必须先创建对象,再通过对象访问成员
 
3.应用程序加载到内存时,分区:
  .text 程序上下文,存放编译后二进制指令集,只读不写
  .data 已初始化数据区,存放已初始化全局变量和静态变量,能读能写
  .bss  未初始化数据区,存放未初始化的全局变量,能读能写
  .rodata 常量数据区,存放程序中的常量: "hello world",只读不写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值