最近在开源中国社区想找一些开源的软件来学习学习, 发现里面较多的可执行实体都是采用C++语言编写的, 同时还发现一些手机类的或者其他类的应用发采用的也是C++,比方说比较有名的QT,里面使用的语言就是C++;感觉以纯C编制的应用程序比较少,同时也想看看C++这个语言与C到底有多大区别,所以就决定开始自学C++。
采用的教材是: C++ Primer 第四版的中文版, 图灵程序设计丛书(这个头衔让我想起那个科学奇人和怪人:图灵,一个永不磨灭的名字),人民邮电出版社,原本打算用C++ Primer Plus 第五版,可是书店没有卖的,而刚好在网上推荐的书目里面也有C++ Primer,于是就花了80大元买了一本。
从今天开始我的C++学习之路, 不知道非计算机专业的人员学习C++,会有什么后果,或者学习的难度大不大......一切只能待日后慢慢体验了。
下面开始我的学习记录。
很奇怪,为什么这本书的第一个实例不是Hello Word!的实现, 难道是为了颠覆Hello Word!在程序界的地位,还是为了彰显C++与C的不同.
1、C++的主函数
C++程序也是有函数组成的, 而且在C++程序中也有一个入口函数:main(),和C中一样,程序的执行从mian开始,并且在main中结束。
Exp:
int main()
{
return 0;
}
C++的函数包括4个部分:
函数返回值类型 函数名 函数参数列表
函数体
这个结构和C语言中的一样。在上面的函数中:
int 表示main函数在执行完后将返回一个int类型值(int 内置数据内心 Built In type),
mian就是函数的名称, 在C++程序中有且只有一个main函数。
() 部分就是mian函数是参数列表, 准确的说是形式参数列表
{ } 之间的部分是函数体, 这个函数体包括一个C++的语句:return 0;
当然者只是一个简单的main函数实现, 大体函数的结构就是这样, 与C语言的结构基本一致。
2、 关于main函数的返回值
实际运行的过程中,我们如果这样定义main函数也没有问题:
Exp:
main()
{
;
}
这里定义了一个没有返回值和实际执行语句的main函数,这是一个最简单的程序了。他什么也不干,也不能干,但是他确实是一个完整的程序。
在此推荐使用具有返回值的main函数, 并且建议返回值类型是int型。因为在系统启动并执行完程序后需要一个值来判定程序是否正确执行;通常在
Unix和类型Unix系统下返回0表示程序成功执行, 在Win下也一样。当返回非零值的时候就表示程序执行过程中有错误,这些错误由系统定义。
如果定义了返回值类型, 则函数的返回值必须和定义的类型一致, 或者需要进行转换后才能返回否则将出现错误。
3、编译和执行程序
无论如何上面的Example是一个完整的程序,那么怎么编译和执行它呢
我们假设源程序的文件名为: main.cpp
通常C++的源代码的扩展名是: cpp 或者cxx等
常用的编译器有: GNU C++(g++)、 Microsoft的Visual Studio中的VC ++ 以及Unix中的CC。
g++的编译过程:
$g++ main.c
如果不加编译选项则在当前目录生成一个a.out的可执行文件, 可以通过
$ ./a.out 来执行这个程序
VC++的编译过程:
>cl -GX main.c
如果编译成功则会生成一个与源代码文件同名的可执行文件: main.exe ;可以通过执行:
>main.exe 来执行这个程序
CC的编译过程与g++的编译和执行过程一样,这里就不说了。至于编译器选项不在此处讨论,以后有机会在说吧.......哈哈 我很懒
IDE环境的编译和编辑:
通常用IDE编译和编辑程序,还需要学习环境的使用方法,因为这里空间和时间有限,所以就不讨论了。
4、 C++中的标准输入和输出
在标准C++的库中定义了几个标准的输入输出流: istream、 ostream;这两个标准输入输出由标准iostream库来处理实现。
istream和ostream类型是标准iostream库的基础。
C++同时定义了几个标准的输入输出对象: cin、 cout、cerr和clog。
cin对象映射到标准输出设备,通常是显示器;cout映射到标准输出设备,通常是键盘; cerr也映射到标准输出设备,通常是显示器;
clog对象用来产生程序执行时的信息。
一个简单的IO应用:
Exp:
#include <iostream>
int main()
{
int var1,
var2;
std::out<<"Enter two num:"
std::in>>var1>>var2>>std::endl;
std::out<<"You have input tuo number:"<<var1<<"and"<<var2<<std::endl;
return 0;
}
简单是解析一下这个程序:
#include <iostream>
为预处理指令,同C语言中的include指令, 表示包含头文件。
int var1,
var2; 与C语言同,定义两个整型的变量, 在C++中成为对象好像更合适。
std为命名空间(namespace),使用命名空间的可以避免命名的冲突,如果引用了两个不同的命名空间中同名的对象不会引起程序错误。
:: 为作用域操作符, 与C语言中的::具有相同的相似的作用。
<< 操作符: 输出操作符用来将输出对象映射到输出流上,这里就把输出对象映射到std::cout输出流上。<<操作符是一个二元的操作符,需要
两个操作数, 左边为输出流对象,右边为待输出对象, 并且<<操作符返回一个与左操作数类型一致的对象。因此这里我们可以:
std::out<<"You have input tuo number:"<<var1<<"and"<<var2<<std::endl;
>> 操作符: 输入操作符, 用来从输入流取出对象并将对象格式化后映射到接收对象上,>>也是一个二元操作符; 需要两个操作数,左边为输入流
对象,右边为接收输入的对象, 并且返回一个与左操作数类型一直的对象。因此我们可以:
std::in>>var1>>var2>>std::endl;
std::endl :输出流操纵符,当把它写入到输出流后, 将具有换行的效果,同时他会要求刷新与设备相关联的缓冲区。
5、注释
C++中支持两种注释:
单行注释: 由 // 引起的注释 ; 单行注释只能用于C语句的行尾
多行注释(注释对): /* 注释内容 */ ; 多行注释可以出现在可以出现空格、制表符的地方。
注释对不可嵌套, 否则会引起不必要的麻烦。
6、简单的C++程序控制结构
while、for和if语句。这些语句的作用同C语言,因此不再啰嗦.......
一个值的主意的地方是:
对于while、for和if语句的条件语句,可以是具有任何返回值的表达。
下面均假设:
int var;
例如:
while(std::in>>var1)
又例如:
if(std::in>>var1)
这里不知道:
while(std::out<<var)如何结束, 因为无论如何std::out 都可以返回一个对象(????........ing)
7 类的简介
在C++的世界里,可以简单的用一句话概括: 一切皆对象。
对象有类类型实例化而成,
在C中用:
class关键字定义类类型, 而用类类型定义对象, 然后根据类类型实例化对象。
Exp:
class classtype
{
}
定义一个类对象:
classtype classobject ; //很简单与定义变量一样
类的定义与C中的结构体相似, 但是类中可以定义类成员函数。具体就不说了,等到学到的时候在说吧...............