c++的一些基础

来源:互联网 发布:linux ddos 攻击工具 编辑:程序博客网 时间:2024/06/08 16:24
  • 面向对象程序设计包括:类的声明部分,类的使用部分。

p17

  • 结构, 联合和枚举类:

p23

  • c++中他们都是类型名, 和c语言不同:
enum Bool{FALSE, TRUE};struct String {    char *str;    int length;}:union Number {    int i;    float j;}:

c语言定义变量时:

enum Bool done;struct String str;union Number x;

c++中定义变量时:

Bool done;String str;Number x;
  • const修饰符:

p25

#define PI 3.14 // 只是单纯的文本替换

对比:

const float PI = 3.14;
  • void 指针:

p27

void指针是一种通用型指针, 任何类型的指针值都可以赋给void类型指针.

void pa; // 错误, 不能声明void类型的变量void *pc; // 正确, 可以声明void类型的指针
  • 内联函数:

p28

inline double circle(double r) {}
  • 带默认参数值的构造函数:

p30

void init(int x = 5, int y = 10);

编译器按照从左到右的顺序结合.

init(100, 50); // x = 100, y = 50init(25); // x = 25, y = 10init(); //x = 5, y = 10
  • 函数重载:

p31

同一作用域中, 函数参数类型不同参数个数不同, 或者两个情况都有, 函数名可以相同.

需要注意的地方:

  1. 函数返回值类型不在参数匹配检查之列, 若两个函数的参数个数和类型都相同, 只是函数返回值类型不同, 则不允许重载.

如下情况不允许:

int mul(int x, int y);double mul(int x, int y);
  1. 函数重载与带默认值的函数在一起使用时, 可能引起二义性, 如:
声明:  void dra(int r = 0, int x = 1, int y = 2);void dra(int r);调用:  dra(20);  此时编译系统不知道调用哪一个.
  1. 函数调用, 实参和形参类型不符时编译器不能识别是哪一个.
原型: void f(int x);void f(double x);调用:  int c_f(5.6);此时, 编译器不能分辨将5.6转换成int还是long, 导致不可分辨的错误.
  • 作用域标识符::

p33

我的理解就是相当于路径.

  • 强制类型转换:

p33

首先c++支持c中的强制类型转换的用法, 例如:

int i = 10;  double x = (double)i;

另外, c++支持另一种格式, 类似于函数调用的格式:

int i = 10;  double x = double(i);

c++两种方法都支持, 推荐后一种.

  • new 和 delete:

34

计算机内存被分为4个区: 程序代码区, 全程数据区, 栈, 堆.

new分配的基本形式:

指针变量名 = new 类型;

delete释放内存基本形式:

delete 指针变量名;

new为数组动态分配内存空间:

指针变量名 = new 类型名[下标表达式];  例如:  int *pi = new[10];

释放数组动态内存:

delete []指针变量名;  例如:delete []pi;

new给简单变量分配内存并初始化:

指针变量名 = new 类型名(初值);例如:  int *p;p = new int(99);

new不能对动态的内存数组储存区进行初始化

  • 引用:

p37

格式:  类型 &引用名 = 已定义的类型名;例如:  int i = 5;int &j = i; // &是引用声明符, 不代表地址. = 也不能理解为赋值

引用作为函数参数:

void swap(int &m, int &n) {}

引用作为函数的返回值:

#include <iostream>using namespace std;int a[] = {1, 2, 3, 4, 5};int &index(int);int main() {    cout << a[2] << endl; // a[2]的原值    index(2) = 99;    cout << a[2] << endl; // 更改后a[2]的值    cin.get();    return 0;}int &index(int i) {   return a[i]; // 等价返回数据元素a[2] }

输出:

3  99

对引用注意的地方:

  1. 不允许建立void类型的引用.
    void &r = 10; // 错误
  2. 不能建立引用数组.
    int a[4] = "abcd";int &ra[4] = a; // 错误
  3. 见注释说明.
    int n = 3; int &&r = n; // 错误, 不能建立引用的引用int &*p = n; // 错误, 不能建立指向引用的指针
  4. 可以将引用的地址赋值给一个指针, 此时指针指向的是原来的变量.
    int a = 50;int &b = a;int *p = &b; // 指针相当于指向a, p保存的是a的地址
  5. const加以限制.
    int a = 50;const int &b = a; b = 3; // 错误, 不允许改变b的值但是可以通过a改变, 如:  a = 10; // 可以
  6. 引用只在声明的时候带有引用运算符, 其他地方不带, 若出现&那是地址操作符.
0 0
原创粉丝点击