读书人

C++ 学习札记 (C++概述)

发布时间: 2013-04-21 15:31:38 作者: rapoo

C++ 学习笔记 (C++概述)

???? 从今天开始好好学习下C++!

???? 注:1.因为自己有JAVA的编程经验,所以只注意自己比较模糊的东西

??????????? 2.因为完全跟着书来学习的,所以文章里面的东西基本全部来自书中。

?

??? 自学资料C++ Primer 第三版中文版

??? 自学工具Eclipse for C++

??? 编译工具MinGW

?

??? 环境准备

??? 安装MinGW,设置环境变量Path(具体和JAVA一样),然后打开Eclipse new 一个Excutable类型的项目,就可以运行了。网上有说道如果new 一个makefile类型的项目需要去MinGW安装目录下\bin 将mingw32-make.exe复制成make.exe即可。

???

??? 开学吧!

??? 第一篇 C++概述

??? 1.C++ 标准库中定义的名字,如cout, 不能在程序中直接使用,除非在预处理指示符:

??? #include <iostream>

???? 后面加上

???? using namespace std;

???? C++标准库中的名字都是在一个称作std的名字中声明的,这些名字在我们程序文本文件中不可见,除非我们显示的使用它们可见。

?

??? 2. C++定义一组内置的基本数据类型:整数类型(int),浮点类型(float),字符类型(*char),布尔类型(boolean),每种类型都与C++的一个关键字相关联。

??????? C++还提供了一组扩展的基本数据类型:字符串(string),复数(complex member),向量(vector),和列表(list)。

?

??? 3. 头文件通过Include预处理指示符而成为我们程序的一部分。它有两种格式

??????? #include <some_file.h>

??????? #include "my_file.h"

?????? 如果文件名用尖括号括起来 ,表明这个文件是一个工程或标准头文件,查找过程会检查预定义的目录。

?????? 如果用双引号括起来,表明该文件是用户提供的文件,查找该文件时将从当前文件目录开始。

?

?? 4.条件指示符#ifndef防止头文件的重复处理

????? #ifndef BOOKSTORE_H

????? #define BOOKSTORE_H

????? #endif

???

??? 5.#ifdef指示符常被用来判断一个预处理器常量是否已经被定义,以便有条件地包含程序代码。

?

??? 6.编译C++程序时,编译器自动定义了一个预处理的名字__cplusplus。因此我们可以根据它来判断程序是否是C++程序,以便有条件的包含一些代码。例如:

??????? #ifdef __cplusplus

????????? extern "C"

??????? #endif

?????? 在编译标准C时,编译器将自动定义名字__STDC__,__cplusplus 和 __STDC__不会被同时定义。

?

??? 7.C++的输入输出功能由输入输出流(iostream)库提供。使用该库的程序必须包含相关的头文件:

?????? #include <iostream>

????? cout << "out"<<endl;

????? int a;

????? cin >> a;

????? 为了打开文件的输入输出流,除了包含iostream 之外还要包含fstream头文件。

????? #include <iostream>

????? #include <fstream>

????? #include <string>

?

???? int main(){

????????? ofstream outfile("out_file");??? ? ? ? ifstream infile("in_file");

??? ? ? ? if ( ! infile){

??????????? ?? cerr << "error : unable to open input file!\n";

?????????????? return -1;

???? ? ?? }

????? ? ? if( ! outfile ) {

???????????? cerr << "error : unable to open output file ! \n ";

????????????? return -2;

????? ? ?? }

?????????? string word;

?????????? while(infile >> word){

???????????????? outfile << word << ' ' ;

??????????? }

??????????? return 0;

??? }

?

????? 8. C++中数组下标从0开始,同JAVA

?

????? 9. C++支持用指针类型来存放对象的内存地址值。指针的主要作用是管理和操纵动态分配的内存。

????????? C++预定义了专门取地址的操作符&,当我们把它应用在一个对象前时,返回的是对象的地址。

?

????? 10. 静态和动态内存分配的两个区别是:

????????? 静态对象是有名字的变量,我们可以直接对其操作。而动态对象是没有名字的变量,我们通过指针间接的对它进行操作。

????????? 静态对象的分配和释放由编译器自动处理,动态对象的的分配和释放,必须由程序员显示的管理,相对来说比较容易出错,它通过new 和 delete 两个表达式来完成。

?

?????? 11. 由于C++不允许成员函数和数据成员共享一个名字,所以在这样的情况下,一般习惯在数据成员名字前加一个下划线(_)。

?

??????? 12.双冒号(::),是域操作符。

????

??????? 13.异常处理机制

??????????? 异常由(throw)抛出。异常被抛出时,正常程序被挂起,知道异常被处理完毕。

???????????? 异常的处理由 catch子句来执行。catch子句和try相关联。

????????

????????? 14.命名空间(namespace)机制允许我们封装名字,一般情况来说,只有我们希望自己的代码被外部软件开发部门使用时,才使用命名空间。

?

????????? 15.由于C++内置的数组不支持容器抽象的语意,向量是一个类模板。vector数组可以再运行时动态的增长。使用时必须包括vector头文件。类型JAVA的ArrayList :)

??????????? 定义向量:

??????????? #include <vector>

?????????? vector<int> ivec; //空的

??????????? vector<int> ivec (10);

??????????? vector<string> svec (10);

??????????? 遍历:

??????????? 1) 通过下标遍历

??????????? int size=10;

???????????? vector<int> ivec(10);

??????????? for(int ix=0;ix<size;++ix){

?????????????????? ivec[ix]=ix;

???????????? }

??????????? 2) 通过迭代器遍历

??????????? vector<int>::iterator iter=ivec.begin();

???????????? for(int ix=0;iter!=ievc.end();++ix,++iter){

????????????????? *iter = ix;

???????????? }

?????????? 算法:

?????????? 要使用泛型算法,必须包含algorithm头文件,基本的算法有,搜索,分类,删除,算术,生成 ,关系等。PS:类似java中的Collections类

读书人网 >C++

热点推荐