您的位置:首页 > 编程语言 > C语言/C++

48,C++(02)

2013-11-06 23:51 330 查看
/*

达内学习 C++ day46 2013-11-6

*/

一,c++发展

1983 正式命名

1987 GNU c++

1992 微软 ibm c++

1998 c++98

2003 c++03

2011 c++0x

gcc **.cpp -std=c++0x;

二,第一个C++程序

1,文件后缀 .c .cpp .cxx .C 推荐.cpp

2, 标准C++没有.h头文件

cstdio cstring ctime

3, 引入头文件 实际是对数据的声明

using namespace std;

4,编译器

gcc **.cpp -lstdc++

g++ **.cpp

-S 生成汇编 -O 优化 -g生成调试信息 -E预处理 -I 头文件位置 -l库的位置

三,命名空间

1,命名空间的概念

将一组相关的数据包装到一起,然后给这个包装的名字起一个逻辑名称。

2,目的

方便管理数据 防止命名冲突

3,语法

namespace -name{

数据

}

空间中的数据 声明和实现 是可以分开的

4,命名空间使用

5,特殊的命名空间 匿名命名空间

namespace{

数据

}

6,命名空间的嵌套

四,c++中的 结构 联合 枚举

1,结构

定义变量时可以不使用 struct

结构体中可以定义函数

c++中没有任何成员 结构体大小是1

2,联合

定义变量时 可以不在使用 union

支持匿名联合

(大端序 小端序 for)

3,枚举

定义变量时候,可以不再使用 enum

本质上是整数,所以枚举值可以赋值给int

但是c++类型检查更严格,int 不能赋值给 enum

五,bool 类型

c++ 作为一种特定的类型

取值只有 true(1) false(0)

赋值可以为任意值 只要不是 NULL 0 '\0' false 其他都是真

六,替换

七,c++中的函数

1,无参的参数列表,严格匹配,void依然可以用

2,c++函数 必须前置声明,不再支持隐式声明

3,返回值不能省略 main函数除外

4,c++中的函数重载

a,什么是函数重载

在同一作用域,函数名相同,参数列表不同,返回值任意叫重载(overload)

参数列表不同是 参数个数 类型 顺序 不同都会是列表不同

b,函数重载的原理

当编译生成代码时 函数调用名 会根据函数名和参数列表重新生成调用名。

c,函数重载的好处

对函数的实现者 函数的名字简单

对函数的调用者 不用考虑类型 方便调用

d,重载的引入带来的问题 和解决方案

跨编译器调用

防止编译器改名 extern "C" int add(int a,int b)

如果用c++ 实现一个函数需要在实现中加上一个extern "C" 然后提供供C调的 头文件

如果c实现函数,需要给c++ 提供一个调用头文件 头文件中需要加一个 extern "C"

5,哑元

参数只有类型 没有形参名

作用就是保持函数的向前兼容 区分函数

6,参数默认值

不传参默认,传参以后替代

注:参数的默认值必须靠右 ;当函数的声明和实现分离时,参数默认值写在头文件中。

不能和重载函数形成冲突。

参数默认值的好处:简化传参

7,内联函数

宏函数 预处理时候完成替换

内联函数 编译时完成替换

inline void test()

内联只是一种请求 如果请求成功 则把代码粘贴过去 如果请求不成功则变成普通

代码量大或者函数递归时候 不容易请求成功。

八,内存分配

new delete 申请单个内存

new[] delete[] 申请多个内存

int*p = new int; 初值不保证是 0

可以指定初始值 int* p =new int(0)

释放内存 delete p ; 注意释放以后要置 NULL

/* 申请多个内存对象 */

int *parr = new int[5];

parr[0] = 9; parr[1] = 5;

/* 释放内存 */

delete[] parr; //成对new[] delete[] 必须带[]

定位分配

char data[100];

int *parr = new(data)int[25]; 不用释放

九,c++中的引用

1,什么是引用

引用就是一个对象的别名

2,如何定义引用

int a = 100;

int& b =a; //引用必须初始化

3, 引用一旦确定就不能修改

char *const p; //指针指向不能改变

const char * p;//指针指向可以改变

4,const 引用

const int& ra =100; //不加const不可以 后面是常量

5,函数中 参数的值传递 和 引用传递

设计一个函数 传入来两个整数参数 交换两个整数参数的值

引用作为参数的目的 减少参数的赋值,达到函数内部修改外部数据的目的

6,引用作为函数的返回值

把函数的返回值 做左值,

返回的引用一定要确保函数调用完成后 引用保持合法

int& add(int& a,int b)

{

a+b;

return a;

}

十,C++ 中的类型转换

a,static_cast<类型>(变量名)

在某个方向上可以做隐式类型转换

void* pv;

int* pa=&a;

pv = pa;

pa = static_cast<int*>(pv);

b,动态转换 dynamic_cast<类型>(变量名)

有继承关系 类型之间进行转换

c,const_cast<类型>(变量)

去掉const修饰的

volatile const int a = 100; //volatile 每次用到从内存中取出

int * pa = const_cast<int*>(&a);

*pa = 1000; //不加volatile 的话 不能修改成功

d,重新解释

reinterpret_cast<类型>(变量);

允许任何类型之间进行转换,包括指针——整数 整数--地址

十一,c++之父给c给c程序员的建议

1,尽量少使用宏, 使用const enum去定义常量,使用inline 代替带参宏

使用namespace 防止命名冲突

2,变量随时用 随时去定义 以保证初始化

3,尽量使用引用 代替指针

4,尽量多的使用const 修饰(函数的参数是引用或者指针类型)

5,c++使用string 代替c 字符数组和指针

6,面向对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: