有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 6479|回复: 70
收起左侧

C++教程(一):快速入门

[复制链接]

该用户从未签到

258

主题

314

好友

3万

积分

第二章

积分
35715
发表于 2012-6-28 19:59:51 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
本帖最后由 轻舟过 于 2012-7-21 21:17 编辑

到博客看的话,排版可能会好看一些
http://bimania.org/2012/07/20/c-plus-plus-tutorial-1/

编程的第一课基本上是对程序有个初步的认识,下面的内容涵盖了程序的基本的知识,开发环境的选择,IO库的基本知识以及程序注释。其实基本是照搬《C++ Primer 第四版》的第一章的,而且后面几节被我省略了。有错的话请指正。


编写简单的C++程序

每个C++程序都包含一个或多个函数,其中必须有一个函数为 main ,并且 main 函数是唯一被系统显式调用的,系统通过调用 main 函数来执行程序, main 函数执行组成自己的语句并返回一个值给操作系统。操作系统则根据 main 函数的返回值来确定程序是否成功执行完毕,返回0表示程序成功执行完毕,其他值则通常说明出现了错误。
下面就是一个简单的main函数,它不执行任何功能,只是返回一个值:
[mw_shl_code=cpp,true]int main()
{
    return 0;
}[/mw_shl_code]
定义函数必须指定函数的返回类型、函数名、圆括号内的参数表(可能为空)和函数体,main函数也不例外,这里它的返回类型是int型,main函数的返回类型也只能是这种int型,该类型是C++的内置类型,是由C++定义的,这种类型表示整数。函数名为main,这里main函数的参数表为空。函数体是函数定义的最后部分,以花括号开始并以花括号结束的语句块:
[mw_shl_code=cpp,true]{
    return 0;
}[/mw_shl_code]

语句块中只有一个return语句,该语句终止函数并将返回值返回给函数的调用者,return后面所跟的值就是函数的返回值,这个值的类型必须和函数的返回类型相同,或者可以转换成函数的返回类型。对于上面的例子中,返回值必须是int类型,而0是int类型的,所以这里没有问题。C++中的语句都是以分号结束的,这点需要注意。
编译与执行程序

编写、编译、执行程序大体有两种选择,使用或者不使用集成开发环境(IDE)。
IDE是集成了文本编辑器、编译器、、调试器等多种工具,具有点击式的图形界面,在开发复杂程序的时候非常有用,编译运行?点击一下按钮就可以了,之后下面会有一个框列出程序中存在的错误(如果有的话),点击错误信息可以跳到错误发生的代码位置。微软的Visual Studio就是一款功能非常强大的IDE,不过一般时候写点小程序倒是用不着这把牛刀,我个人推荐CFree这个编译器,体积比较小,基本上常用的功能也都有了。
当然也可以不使用集成开发环境,用文本编辑器写程序,在命令行下编译、运行、调试,为了代码能写起来爽,通常要求文本编辑器有智能缩进以及语法高亮的功能,这样的文本编辑器有非常非常多的选择,比如有UltraEdit、EditPlus、Notepad++、sublimetext,当然还有两大神器Emacs和Vim,除了两大神器比较难以上手之外,其他的应该都还好。
编译器的话首选g++,Windows环境下的话推荐装一个mingw,包含了g++等各种有用的工具,可能需要配置一下环境变量。用g++编译的话只要在命令行输入g++后面跟你的文件名就好了,默认会编译成a.exe,运行的话只要输一个a回车就行了。如果想要改变输出的可执行文件名,可以用加上-o参数后面跟输出的文件名就可以了。当然g++其他的参数有很多,有空可以去研究研究。
初窥输入输出

C++的输入输出是由标准库提供的。程序通常要用到处理格式化输入和输出的iostream库。iostream库的基础是两种命名为istream和ostream的类型,分别表示输入流和输出流。流是指要从某种IO设备上读入或写出的字符序列。
标准输入与输出对象

标准库定义了4个IO对象。处理输入时使用cin的istream类型对象,这个对象也被称为标准输入。处理输出时使用命名为cout的的ostream类型对象,这个对象也被称为标准输出。另外两个对象是cerr和clog。
一个使用IO库的程序

下面来看一个使用了IO库的程序,程序要求用户给出两个数,然后输出它们的和:


[mw_shl_code=cpp,true]#include <iostream>
int main()
{
    std::cout << "Enter two numbers:" << std::endl;
    int v1, v2;
    std::cin >> v1 >> v2;
    std::cout << "The sum of " << v1 << " and " << v2
        << " is " << v1 + v2 << std::endl;
    return 0;
}[/mw_shl_code]
运行程序之后会在屏幕上显示:
Enter two numbers:

这时候输入
3 7

跟着一个换行符,程序会产生下面的输出:
The sum of 3 and 7 is 10

第一行是一个预处理指令


[mw_shl_code=cpp,true]#include <iostream> [/mw_shl_code]

这个指令告诉编译器程序要使用iostream库。尖括号里的名字是一个头文件,程序使用库工具时必须包含相关的头文件。#include指示必须单独写成一行,#include指令应出现在任何函数的外部。而且习惯上,程序的所有#include指令都在文件开头部分出现。
写出到流
main函数体中的第一条语句执行了一个表达式。C++中一个表达式由一个或几个操作数和通常是一个操作符组成。语句的表达式使用输出操作符'<<',在标准输出上输出提示:
[mw_shl_code=cpp,true]std::cout << "Enter two numbers:" << std::endl;[/mw_shl_code]


这个语句中使用了两次输出操作符,输出操作符接受两个操作数,左操作数必须是ostream对象,右操作数是要输出的值,操作符的作用是将右操作数写到左操作数的ostream对象中。C++中每个表达式都会产生一个结果,这里也不例外,当输出操作符连接两个操作数时,结果是左操作数的值,也就是说输出操作返回的值是输出流本身。因此我们也可以在上面的表达式加上括号
[mw_shl_code=cpp,true](std::cout << "Enter two numbers:") << std::endl;[/mw_shl_code]



endl是一个特殊的值,它被称为操纵符,将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。
另外注意到上面的程序中使用的是std::cout和std::endl,前缀std::表明cout和endl是定义在命名空间std中的。使用命名空间程序员可以避免与库中定义的名字相同而无意间引起命名的冲突,不过代价就是当我们使用标准库中的名字时,必须显示表达出使用的是命名空间std下的名字。当然也可以在函数前加入using namespace std;来引入整个命名空间中的名字。
读入流
在输出提示语之后,将读入用户输入的数据。先定义两个名为v1和v2的变量来保存输入。
[mw_shl_code=cpp,true]int v1, v2;[/mw_shl_code]


上面将两个变量定义为int类型。需要注意的是这两个变量没有初始化,就是没有赋给它们初始值,但是因为会在下面的语句中读入一个值,所以现在可以不必初始化。
输入操作符的行为与输出操作符相似,不同的是它接受一个istream对象作为其左操作数,接受一个变量或对象为右操作数,它从istream操作数读取数据并保存到右操作数。像输出操作符一样,输入操作符返回左操作数作为结果。
这里整个表达式的效果是从标准输入读取两个值,第一个存放在v1中,第二个存放在v2中。
完成程序
最后是输出结果:
[mw_shl_code=cpp,true]std::cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << std::endl;[/mw_shl_code]

这条语句与之前的输出语句并没有什么本质区别,它将每个遇到的右操作数输出到标准输出。这里的操作数有多种类型,有些操作数是字符串字面值。例如:
"The sum of "
其他的是各种int值,如v1、v2以及对算术表达式v1 + v2求值的结果。iostream库定义了接受全部内置类型的输入输出操作符版本。
关于注释

注释会被编译器所忽略,但是它可以帮助其他人阅读程序,通常用于概括算法、确认变量的用途或者阐明难以理解的代码段。
C++中注释有两种类型,一种是从C语言集成过来的/* */,/*与*/之间的为注释内容,会被编译器所忽略,这种注释可以跨越程序的多行。另一种则是单行注释//, 本行中//后面的内容均为注释内容,会被编译器所忽略,这种注释不能跨越多行。
下面是一个例子程序:

[mw_shl_code=cpp,true]#include <iostream>
/* Simple main function: Read two numbers and write their sum */
int main()
{
    // prompt user to enter two numbers
    std::cout << "Enter two numbers:" << std::endl;
    int v1, v2;           // uninitialized
    std::cin >> v1 >> v2; // read input
    return 0;
}[/mw_shl_code]

原创文章,转载请注明: 转载自二进制狂热
本文链接地址: C++教程(一):快速入门
博客什么的求人气 http://bimania.org
回复

使用道具 举报

该用户从未签到

258

主题

314

好友

3万

积分

第二章

积分
35715
 楼主| 发表于 2012-6-28 21:09:19 | 显示全部楼层
本帖最后由 轻舟过 于 2012-6-28 21:10 编辑

这是对hello, world程序的一点解释,可能有点乱,后面会更系统一些的
不知道这个@ID:L1 你能否看懂,不懂可以问我哦
博客什么的求人气 http://bimania.org
回复 支持 反对

使用道具 举报

该用户从未签到

28

主题

103

好友

9783

积分

技术宅认证程序员

苦逼,受剥削人民

积分
9783
发表于 2012-6-28 22:38:23 | 显示全部楼层
论坛一直没有完整C++教程
xuxu写了一点就没写了
期待大神的后续教程
不过我已经对C艹充满了恐惧....
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

258

主题

314

好友

3万

积分

第二章

积分
35715
 楼主| 发表于 2012-6-28 22:47:06 | 显示全部楼层

为什么?
不过C++用指针什么的容易出错,地址可以乱访问,数组越界可能也不会有提示,确实比起其他语言不那么友好
博客什么的求人气 http://bimania.org
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

12

好友

2918

积分

Continue

积分
2918
发表于 2012-6-28 23:17:56 | 显示全部楼层
棒~
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

258

主题

314

好友

3万

积分

第二章

积分
35715
 楼主| 发表于 2012-6-28 23:19:47 | 显示全部楼层

谢谢
博客什么的求人气 http://bimania.org
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

18

主题

15

好友

4227

积分

序章

积分
4227
发表于 2012-6-29 01:03:56 | 显示全部楼层
轻舟过 发表于 2012-6-28 22:47
为什么?
不过C++用指针什么的容易出错,地址可以乱访问,数组越界可能也不会有提示,确实比起其他语言不 ...

这让才考完C++的童鞋情何以堪…………
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

258

主题

314

好友

3万

积分

第二章

积分
35715
 楼主| 发表于 2012-6-29 01:10:28 | 显示全部楼层
ΣSyaoran 发表于 2012-6-29 01:03
这让才考完C++的童鞋情何以堪…………

不过它也有优点啊,就是速度比较快
缺点什么的只要小心一点,程序写多了之后自然可以避免的
博客什么的求人气 http://bimania.org
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

3

好友

1040

积分

Continue

积分
1040
发表于 2012-6-29 03:17:57 | 显示全部楼层
轻舟过 发表于 2012-6-29 01:10
不过它也有优点啊,就是速度比较快
缺点什么的只要小心一点,程序写多了之后自然可以避免的 ...

C++ 的优点可不仅仅是速度比较快而已哟。。。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 1109 天

连续签到: 7 天

[LV.10]以坛为家III

272

主题

1

好友

9万

积分

第五章

积分
96928
发表于 2012-6-29 04:36:07 | 显示全部楼层
我有时间会看的..
像糖纸一样华丽的一无是处
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

12

好友

2918

积分

Continue

积分
2918
发表于 2012-6-29 11:13:20 | 显示全部楼层
没有GC,规模庞大
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

97

主题

75

好友

1万

积分

第一章

积分
11926
发表于 2012-6-29 11:14:01 | 显示全部楼层
ID1 发表于 2012-6-29 04:36
我有时间会看的..

我周六是不是就可以不用写了,以后他接手就可以了~
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

258

主题

314

好友

3万

积分

第二章

积分
35715
 楼主| 发表于 2012-6-29 11:39:52 | 显示全部楼层
Kadovat 发表于 2012-6-29 03:17
C++ 的优点可不仅仅是速度比较快而已哟。。。

当然这只是优点之一嘛
博客什么的求人气 http://bimania.org
回复 支持 反对

使用道具 举报

该用户从未签到

258

主题

314

好友

3万

积分

第二章

积分
35715
 楼主| 发表于 2012-6-29 11:56:59 | 显示全部楼层
面瘫大明神 发表于 2012-6-29 11:13
没有GC,规模庞大

没有GC就自己管理内存呗,虽然一不小心容易内存泄露
规模庞大是什么意思?
博客什么的求人气 http://bimania.org
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

12

好友

2918

积分

Continue

积分
2918
发表于 2012-6-29 12:23:46 | 显示全部楼层
轻舟过 发表于 2012-6-29 11:56
没有GC就自己管理内存呗,虽然一不小心容易内存泄露
规模庞大是什么意思? ...

C++包含内容太庞大,只能学会用到的一个子集
自己管理内存很太麻烦,尤其是当你习惯用带GC的语言之后
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|技术宅(基宅) ( 粤ICP备18082987号-1 | 浙公网安备 33010902001746号 )

GMT+8, 2024-5-19 14:12 , Processed in 0.225652 second(s), 29 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表