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
同一作用域中, 函数参数类型不同或参数个数不同, 或者两个情况都有, 函数名可以相同.
需要注意的地方:
- 函数返回值类型不在参数匹配检查之列, 若两个函数的参数个数和类型都相同, 只是函数返回值类型不同, 则不允许重载.
如下情况不允许:
int mul(int x, int y);double mul(int x, int y);
- 函数重载与带默认值的函数在一起使用时, 可能引起二义性, 如:
声明: void dra(int r = 0, int x = 1, int y = 2);void dra(int r);调用: dra(20); 此时编译系统不知道调用哪一个.
- 函数调用, 实参和形参类型不符时编译器不能识别是哪一个.
原型: 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
对引用注意的地方:
- 不允许建立void类型的引用.
void &r = 10; // 错误
- 不能建立引用数组.
int a[4] = "abcd";int &ra[4] = a; // 错误
- 见注释说明.
int n = 3; int &&r = n; // 错误, 不能建立引用的引用int &*p = n; // 错误, 不能建立指向引用的指针
- 可以将引用的地址赋值给一个指针, 此时指针指向的是原来的变量.
int a = 50;int &b = a;int *p = &b; // 指针相当于指向a, p保存的是a的地址
- const加以限制.
int a = 50;const int &b = a; b = 3; // 错误, 不允许改变b的值但是可以通过a改变, 如: a = 10; // 可以
- 引用只在声明的时候带有引用运算符, 其他地方不带, 若出现&那是地址操作符.
0 0
- 一些好的C\C++基础 博客
- Objective-C 一些很基础的总结
- C/C++的一些基础问题(2)
- c语言基础学习的一些要点
- 一些C基础的小编程题目
- 一些c语言基础!
- C语言的一些可能犯迷糊的基础
- C语言的一些可能犯迷糊的基础
- C语言的一些可能犯迷糊的基础
- 初入C++(一) c++中的一些基础和与c的一些区别
- java 与c、c++的一些区别(基础)
- C语言中一些比较基础而又重要的知识
- c/c++中的一些基础但必须熟记的知识
- c/c++中的一些基础但必须熟记的知识
- 我对Objective C的一些基础理解(第一版)
- 黑马——C语言的一些基础(1)
- 黑马——C语言的一些基础(2)
- [C++基础 面对对象的一些知识]
- ssm整合maven项目启动报错、架包冲突
- hive中构建dual虚表
- 1102. Invert a Binary Tree (25)
- 解决vc6.0在win10下无法正常启动
- 欧拉工程第26题 找出小于1000的数字中令1/d拥有最长循环圈的数字d
- c++的一些基础
- 民生银行的笔试面试题目
- typedef与#define
- 硬盘的读写原理
- bzoj 2705 [SDOI2012]Longge的问题
- 几行代码帮你搞定屏幕适配
- 【noip2015】【Day2】【跳石头】【字串】
- BZOJ 3809 Gty的二逼妹子序列
- c++关于文件的读写操作