C++基础教程(总结)(一)

2015-01-27 14:01:35 · 作者: · 浏览: 58
1、C++语言支持的新特性
?
  
?
  注:1983年夏,“带类的C”被正式命名为“C++
?
2、常量
?
  数值常量、字符常量、符号常量、枚举常量。。。
?
3、变量
变量名代表内存中的一个存储单元,在程序编译连接时由 系统给每一个变量分配一个地址。通过变量名找到相应的存储单元,从中读取数据
变量名的命名规则
未对变量赋初值,其值是一个不可预测的值
初始化不是在编译时完成的(静态存储变量和外部变量除外),而是在运行时执行本函数时赋予初值的
  
4、数据类型
?
  
C++编译系统把十进制小数形式的浮点数默认按双精度处理
浮点数在内存中以指数形式存放
若一个字符串的最后一个为“\”,则它是续行符
在计算机中负数的运算和显示以补码的形式,16的原码为 0001 0000,~16为 1110 1111 ,则~16为负数。因此,~16补码为 1000 1010+1=1000 1011=-11
不同类型数据间的转换(赋值兼容):
?
标准类型数据间的转换
隐式转换;显示转换:类型名(数据) / (类型名)数据
用转换构造函数进行类型转换
用类型转换构造函数进行类型转换
?下面为常量、变量以及数据类型的测试代码:
复制代码
#include
using namespace std;
#define PI 3.1415926
int main()
{
? ? const int NUM=6;
? ? enum color{red,yellow,green,black,white};
? ? cout<
?
? ? int a;//未初始化,值不确定
? ? cout<<"a="<
? ? float b=1.23456789;
? ? cout<
? ? long double c=1.23456789;
? ? cout<
? ? cout<
? ? ? ? <
? ? ? ? <
? ? ? ? <
? ? ? ? <
?
? ? double d=1.23f;
? ? cout<
?
? ? char ch=6;
? ? cout<
?
? ? char ch1=0141; ?//97
? ? cout<<"ab\\\"cd\"\t\101\x41\0cd"<<'\0'<
? ? return 0;
}
复制代码
?
?
5、指针
?
一个变量的地址即该变量的指针
指针变量的值是地址(指针)
凡是存放在内存中的程序和数据都有一个地址,可以用它们占用的那片存储单元中的第一个存储单元的地址表示
& 和 * 的使用:
  
?
有关指针的数据类型:
  
?
指针运算:
指针变量加减一个整型值
指针变量的赋值
指针变量可以赋空值,但不能赋整数
指向同一类型的指针变量相互赋值时,后期操作可能造成指针悬挂问题(一指针所指空间被释放,另一指针所指空间亦被释放),在释放一指针所指的空间时,一定要确保所有指向该空间的指针都已不再需要,以防止指针悬挂 ??
若要对不同类型的指针变量赋值,应用强制类型转换
指针变量的比较
指针变量的相减,相加无意义
指针的一些注意事项:
所有指针,包括访问本地堆的指针,在 Win32 下都是 32 位(4个字节)
一般的C++编译系统为每一个指针变量分配4个字节的存储单元,用来存放变量的地址
在使用指针变量之前须先给它赋一个指向合法具体对象的地址值,否则可能破坏有用的单元的内容
指针的优缺点:
优点
?
在调用函数时,若改变被调用函数中某些变量的值,这些值能为主调函数使用,可通过函数的调用得到多个可改变的值
可以实现动态存储分配
占内存少,运算速度快
缺点
?
容易产生难以发现的错误
数组与指针:
  
?
指针数组作为main函数的形参:
?
  在DOS状态下输入:命令名 ?参数….
?
下面为相应的代码:
复制代码
#include
using namespace std;
int main(int argc, char *argv[])
{
? ? while(argc > 1)
? ? {
? ? ? ? ++argv;
? ? ? ? cout<<*argv<
? ? ? ? --argc;
? ? }
? ? return 0;
}
复制代码
?
?
动态存储分配:
?
  
?
?
6、引用
int &b = a; ? ?//声明b是a的引用(别名)
声明引用时必须使之初始化
声明b是a的引用后,b不能再作为其他变量的引用,且b和a占同一存储单元,具有同一地址(指针变量需另外开辟空间)
主要用来作为函数参数
调用函数时,实参是变量名不是地址,而系统向形参传递的是地址不是其值
7、字符串
对一个字符串常量,系统会在所有字符的后面加一个’\0’作为结束符
字符串的长度比对应的字符数组(包含一个空字符’\0’)少1字节,字符串数组每一个字符串元素不包含’\0’
编译系统为每一个字符串变量(string类的一个对象)分配固定长度的存储单元(VC为16个字节,GCC为4个字节),存放字符串的地址,即字符串的指针
  访问字符串的三种方法:
字符数组,即C-string方法
字符串变量,即string方法(C++)
字符指针
指针、引用、字符串测试源代码:
?
复制代码
#include
using namespace std;
int main()
{
? ? char str[] = "Hello";
? ? string m_str = "Hello";
? ? string name[5] = {"zhang","li","gao"};
? ? char *pstr = "Hello";
?
? ? while(*pstr!='\0')
? ? {
? ? ? ? cout<<*pstr;
? ? ? ? pstr++;
? ? }
? ? cout<
? ??
? ? cout<<"字符数组的长度:" ?<
? ? cout<<"字符串的长度: ?" ?<
? ? //每一个字符串变量被编译系统分配固定长度的存储单元,VC++为16个字节
? ? cout<<"字符串变量的长度:"<
? ? cout<
? ? //一般的C++编译系统为每一个指针变量分配4个字节的存储单元,用来存放变量的地址
? ? cout<
?
? ? cout<<"**************************************************"<
?
? ? int arr[10]={1,2,3,4,5,6,7,8,9,10};
? ? int *p=arr;
? ? for(int i=0;i<10;i++)
? ? {
? ? ?// cout<
? ? ? ? cout<<*(p+i)<<' ';
? ? }
? ? cout<
?
? ? int *p1 = new int(10);
? ? cout<<*p1<
? ? delete p1;
?
? ? return 0;
}
复制代码
8、函数
?
函数名代表函数的入口地址即函数的指针,函数的指针在编译时被分配
当数组作函数形参时,C++编译系统将形参数组名一律作为指针变量来处理
实参数组名代表一个固定的地址,或说是指针常量,而形参数组名为指针变量
根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数
函数参数传递:
  
?
内置