C++学习笔记(二)

来源:互联网 发布:正规的淘宝代运营 编辑:程序博客网 时间:2024/06/06 17:39

1.对象的定义

(1)全局变量系统会给他提供初始值0,局部变量或者通过new表达式动态分配的,系统不会提供初始值,可能是含有一个随机数,也可能是以前使用过的结果。

(2)C++支持两种形式的初始化。第一种形式是使用赋值操作符的显示形式;第二种是隐士形式,初始化被放在括号中:int ival(1024);  string project("jiefu");

2.指针类型

(1)指针持有另一个对象的地址,使我们能够间接地操作这个对象。指针的典型用法就是构建一个链接的数据结构,如树、链表等;

(2)空类型指针:它可以被任何数据指针类型的地址值赋值;

void *pv = pi;

我们不能够操作空类型指针所指向的对象,只能传递该地址值或将它与其他地址值做比较;

(3)指针可以让他的地址值增;加或减少一个整数值,这类指针操作,被称为指针的算术运算;指针加2意味着给指针持有的地址值增加了该类型两个对象的长度;

3.字符串类型

(1)C++提供了两种字符串的表示:C风格的字符串和标准C++引入的string类类型;

char *p1 = 0;//p1不指向任何一个数组对象

const char *p2 = "";//p2指向空字符

常见错误1:

#include <iostream.h>

const char *st = "the expense of spirit\n";
int main(int argc, char* argv[])
{
 int len = 0;
 while(st++){
  ++len;
 }
 cout<<len<<"; "<<st;
 return 0;
}

//程序会无限循环,因为st没有解除引用;

错误2:

#include "stdafx.h"
#include <iostream.h>

const char *st = "the expense of spirit\n";
int main(int argc, char* argv[])
{
 int len = 0;
 while(*st++){
  ++len;
 }
 cout<<len<<"; "<<st;
 return 0;
}

改正1:st = st-len;//依然存在错误

改正2:st = st-len-1;//正确但不美观

改正3: const char *p = st;

while(*p++);

定义第二个指针,用st对它做初始化;

 补丁(patch):把某些东西伸展开以便补上现有程序中的漏洞;

 string类型:

#include<string>

using namspace std;

string st("the expense of spririt\n");

cout<<"the size of "<<st<<"is"<<st.size();

 

C风格的字符串和string字符串转换:

例1:string s1;

const char *pc = "hello world";

s1 = pc;//可以的

反之:

char *str = s1;//编译的时候会出现类型错误

改1:char *str = s1.c_str();//错误,返回值为常量

改2:const char *str = s1.c_str();//正确

迭代器:是指针的类抽象,由标准库提供;

4.const 限定修饰符

(1):只读性

(2):因为常量在定义后就不能被修改,所以它必须被初始化;未初始化的常量定义将导致编译错误;

 

5.引用类型(reference)

(1):它可以用作对象的另一个名字;通过引用我们可以间接地操作对象,使用方式类似于指针,但是不需要指针的语法;在实际的程序中,引用主要被用作函数的形式参数--通常将类对象传递给一个函数。

(2):引用类型由类型标识符和一个取值操作符来定义,引用必须被初始化:

int  ibal = 1024;

int &refval = ival;

(3):一旦引用已经定义,它就不能再指向其他的对象,故必须要初始化;

 

6.多维数组

int ia[] = {0,1,2,3,4,5,6,,7,,8,9,,0};

a:代表这数组中的一个元素的地址,它的类型是数组元素类型的指针;

7.vector容器类型

vector类为内置数组提供了一种替代表示,与string类一样,vector类是随标准C++引入的标准库的一部分。

#include <vector>

使用vector有两种不同的形式,即所谓的数组习惯和STL习惯。

(1)数组习惯:vector<int> ivec(10);

vector的元素被初始化为与其类型相关的缺省值,算术和指针类型的缺省值是0.对伊class类型,缺省值可通过调用这类的缺省构造函数获得;

显式初始化:

vector<int> ivec(10,-1);定义了ivec ,它包含是个int型的元素,每个元素都被初始化为-1;

(2)STL习惯:定义一个空的vector :vector<string> text;


8.typedef名字

typedef机制为我们提供了一种通用的类型定义设施,可以用来为内置的或用户定义的数据类型引入助记符号。


 

原创粉丝点击