c++学习笔记2

14 篇文章 0 订阅
 C++学习笔记2,C++ Primer第二篇中的第3章。
1、字节(byte)和字(word)
通常字节是由8位著称,字由32位,既4个字节组成。
2、系统定义的类型长度:
通常short为半个字,int1个字,long1-2个字。(字)
通常float1个字节,double2个字节,long double3-4个字节。(字节)
3、整型常量和浮点常量:
在整型常量后面加L/l为长整型,加U/u为无符号。
egg:128u、1024Ul、1L、8Lu。
浮点常量缺省下被认为是double,在浮点常量后面加F/f为单精度,加L/l为扩展精度。
注:L最好用大写,为了与数字1好区分。
4、宽字符与宽字符串:
在字符常量前面加L表示宽字符常量。
egg:L’a’。
在字符串常量前加L表示宽字符串,它会有一个等价的宽空字符最为结束。
egg:L”You are a good man!”。
5、字符串行扩展:
一个字符串可以扩展多行,在一行的最后加一个反斜杠(/),表明字符串文件在下一行继续。
egg:cout<<”How do you do!”/
              <<”How do you do!”;
6、变量的数据域和地址域:
变量和常量都有存储区,都有相关的类型,区别在于变量是可以寻址的。
数据值:存储在某个内存地址中,有时被称作对象的右值(rvalue),被认为被读取的值,文字常量和变量都可以用作右值。
地址值:存储数据值的那块内存的地址,有时被称作对象的左值,被人为是位置值,文字常量不能用作左值。
7、extern关键字。
声明在程序之外有这个对象的定义。
8、对象的初值:
全局域内定义的对象,初始值为0。
局部对象和通过new动态分配的对象初始值为随机的。
9、C++两种初始化形式:
A、使用赋值操作符的显式语法形式:
egg:int inval=1024;
       string project=”2000”;
B、隐式形式:
egg:int inval(1024);
       string project(“2000”);
C、逗号分隔符能为每个对象提供显式初始值。
D、构造函数语法
egg:int inval=int();
10、指针与空指针:
int *pi=0;
pi指针初始化为“没有指向任何对象”。
void* pv;空指针对象不能被操作,只能传送该地址值或将它与其他地址值比较。
包含在pi内部的地址值:pi,类型int*。
计算pi的实际地址:&pi,类型int**。
11、C风格的字符串
指向C风格的字符串的字符指针总是指向一个相关联的数组。
12、const常对象
只能在初始化时候赋值(以后无法改变对象的值)
A、普通指针无法指向常量对象。
B、指向常量的指针可以指向常量对象。
C、指向常量的指针可以指向非常量对象,但是通过此指针是不能改变数值的。
注:指向常量的指针常用作函数的参数。
 
指针常量:不能修改指针所指的对象地址,但是可以修改所指对象的数值。
int* const---指针常量:不能改变指针对想所指的对象地址,但是可以修改数值。
const int*---指向常量的指针:不能通过指针修改所指对象的数值,可以改变指针对想所指的对象地址。
int const*---指向常量的指针:不能通过指针修改所指对象的数值,可以改变指针对想所指的对象地址。
const int* const---指向常量的常量指针:不能改变指针对想所指的对象地址,也不能通过指针修改所指对象的数值。
int const* const---指针常量:指向常量的常量指针:不能改变指针对想所指的对象地址,也不能通过指针修改所指对象的数值。
13、引用:
使用方式与指针类似,但是不需要指针的语法,必须初始化,一旦引用已经定义,就不能在指向其他对象。以下是定义:详细查看C++ Primer97页
A、int iN=1;int& ref=iN;
B、int* pi=&I;int*& ref2=pi;
C、pi=&ref;
const引用可以用不同类型的对象初始化(只要能从一种类型转换为另外一种类型),可以是不可以寻址的文字常量。以下是仅仅对于const引用才合法的定义:
int val = 3.14159;
A、const int& ir=1024;// 文字常量
B、const int& ir2=val;//一般变量
C、const int& ir3=val+1.0;
 
注:const对象来初始化一个引用。
egg:const int inval=1024;
       int*&pi1=&inval;//这个是错误的,非const引用非法。
       const int*& piz=&inval;//这个也是错误的,
       这个引用不是指向一个常量,而是指向一个非常量的指针,指针指向的才是个const对象。
       改为:
       const int* const &pi3=&inval;
注:引用主要被用作函数的参数。详细查看C++ Primer99页
14、boll型 详细查看C++ Primer101页
不能被声明成signed、unsigned、short、long,当表达式需要一个算术数值的bool对象和bool文件都被隐式的提升为int型。
egg:int i=1;bool f=true;i=i+f;
反之亦然,0或空指针被转换成false和true。
15、枚举:
egg:
enum open_modes
{input=1,output,append};
void openfile(string filename,open_modes om);
这里面的open_modes数值只能用相关的枚举值,传递等价值也不行。
声明:open_modes om=input;
注:不能打印枚举成员的实际枚举名,枚举成员不能进行迭代,枚举成员的第一个成员默认数值为0,后面的枚举值依次比前面的大1.
只能被相同枚举类型的对象或枚举成员集中的某个值初始化或赋值。
同样,枚举值会自动被提升为算术类型。
16、数组类型:
一个数组不能被另外一个数组初始化,也不能被赋值给另外一个数组,且,C++不允许声明一个引用数组。
注:C++没有提供编译时刻或运行时刻对数组下标范围进行检查。
17、多维数组:
egg::int ia[4][3]={{0},{3},{6},{9}};
       只初始化每行的第一个元素,其余的元素为0。
       int ia1[4][3]={0,3,6,9,};
       初始化第一行的三个元素和第二行第一个元素,其余为0。
注:ia[1,2]等价与ia[2].逗号运算符。
18、数组与指针的关系:
int ia[]={0,1,2,3,4,5,6,7,8,9};
ia代表数组中的第一个元素的地址。
ia等价于&ia[0];
*ia等价于ia[0];
ia+1等价于&ia[1];
*(ia+1)等价于ia[1];
19、vector容器:
算术和指针类型缺省值是0,对于class类型,缺省值可以通过调用这类缺省构造函数获得。
声明:
A、vector<int> ivec(10);//初始化一个有10个int类型的向量,初始值为0.
B、vector<int> ivec(10,6);// 初始化一个有10个int类型的向量,初始值为6.
C、Int a[5]={1,2,3,4,5};vector<int> ivec(a,a+5);//用数组来初始化向量。
注:vector可以被另外一个vector初始化或可以赋值给另外一个vector。由于STL中对vector的习惯用法完全不同,一般定义一个空vector。详细查看C++ Primer111页
20、复数complex类型:
声明:
A、complex<double> purei(0,7);//纯虚数:0+7i
B、complex<double> realnum(3);//虚数部分缺省为0,3+0i
C、complex<double> zero;//实部和虚部缺省为0,0+0i
注:可以有double、float、long double几种对象。
还可以声明复数对象数组
complex<double> con[2]={ complex<double> purei(2,3), complex<double> purei(2,-3)};
另外复数对象可以声明指针和引用。
21、typedef名字:
注:typedef char* cstring;
       Const cstring cstr;
这里不等价于const char* cstr,而是等价于char* const cstr,一个指向地府的const指针。
22、volatile限定修饰符
egg:volatile int i;
注:编译器不能对引用这些对象的代码做优化处理。
23、pair类型:详细查看C++ Primer115页
要使用pair类型必须包含utility头文件,#include<utility>。
egg:pair<string,string>;
24、类类型:
一个String类的实现。详细查看C++ Primer115页
这里有一个自己稍微修改了点点String类
strcmp函数:strcmp(char*,char*);相等返回0,不相等返回非0。
strlen函数:strlen(char*);返回字符串的长度。
strcpy函数:strcpy(char*,char*);拷贝第二个字符串的值给第一个字符串。
strcat函数:strcat(char*,char*);连接第二个字符串到第一个字符串的末尾。
在类体外定义的内联成员函数应该放在该类定义的头文件中。
this指针:被自动设置为指向左侧的类的对象。
iostream输入输出操作,setw()是一个预定义的iostream操纵符,它允许读入的字符数最多为传递给它的参数减一。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值