阅读:5292回复:18
C++ 入门教程 转自 “杰物”
首先,这是一份关于C++的入门教程,不会讲特别深的东西,一般的人应该都能听懂。
在你看到这个贴子的时候,不管你有没有学过其他语言,是为什么学这个,是男是女还是人妖,年龄多少,已婚未婚……你就应该忘掉以前的一切,把自己当做一个小学一年级的学生。 好,不废话了,开始。 咦,有问题了。杰物你总说神马C++的,那些代码怎么弄成程序啊? 额……这个可以去看置顶贴,弄一个IDE吧。 (半小时后……) 好了,打开吧。新建一个C++项目,或者源文件,然后添加如下的代码: #include <iostream> int main(void) { std::cout << "I'm f**king C++!" << std::endl; return 0; } 用复制-粘贴的方式放到你的IDE里。 然后选择编译(或者生成解决方案),然后运行。你会看到在一个黑漆漆的像DOS一样的窗口里,有这样一行文字: I'm f**king C++! 这样表示你成功了!至于那单词中间为什么要有星号,不是我们讨论的问题…… 神马?根本没有什么输出结果,只看到一个黑窗口一闪而过?哦,请在"return 0;"前面加上一行"std::cin.get();",这样程序就会停在那里,然后按一下回车就结束了。(用"system("pause");" 也行,只不过Linux下貌似没有这个命令。 好了,咱们的第一个C++程序大功告成了。不过运行倒是能运行了,可是这一堆乱七八糟的符号和英文单词神马意思啊,怎么用啊?别急,下层楼告诉你。 |
|
100% |
沙发#
发布于:2011-12-23 21:19
#include <iostream>
int main(void) { std::cout << "I'm f**king C++!" << std::endl; std::cin.get(); return 0; } 第一行严格意义上来说,并不是一个语句。因为这个指令的效果只是编译器编译的时候把编译器目录下的Include子目录里的"iostream"文件复制到这个位置来了。它是给编译器看的,不是运行时的。至于这个文件到底能干什么,我们以后还会慢慢说到。我们来分析下这个文件的名字,"io"相信很多人都能明白,就是"input/output"的缩写。然后这个"stream"是"流、小溪"的意思,所以我们称它为"io流"。 第二行是一个空格,去掉它严重影响了程序的外观,虽然在编译器眼里看来它什么都不是。 第三行是我们的代码咯。"int main(void)"这个得好好说说,这一行包括后面的两个大括号,我们称作一个函数。这个函数可不是y=3x这样的函数,而是在程序中实现一些功能的代码块。括号中间的代码就是这个函数的主要部分,完成功能的代码。前面的"int"表示这个函数的返回值(其实我觉得把"返回"二字去掉也无妨)的类型是int,也就是整数(Integer)。"main"是这个函数的名字,以后你定义的函数想叫什么就叫什么,只要是由数字字母下划线这三种ASCII字符构成的,而且以字母或下划线开头,且不重名就行。编译器可不会管你的函数名叫s**t还是叫bi**h(自己把星号内部替换成正确的字母)。函数名后面还有一对小括号"()",中间有一个"void"。这表示什么意思呢?函数名后面的括号是每个函数必备的东西,表示这个函数的参数表,你应该能明白"参数"的意思吧——就是需要的变量,不明白也没关系。void表示空,也就是没参数。当然,main有两种标准形式: int main(void) int main(int argc, char** argv) 至于后面一种什么意思,和第一种有什么区别, 日 后再谈。 第四行和第八行的大括号表示main函数定义的开始和结束,不再多说。 第五行的"std::cout << "I'm f**king C++!" << std::endl;"是整个程序中实现功能的关键部分。功能就是输出这句话,后面的"std::endl;"表示换行。当然,引号内的字符串(字符串是什么?你就当做是一堆字符吧)可以随便改,你把"C++"改成"杰物"我也不会知道。"<<"这个符号可以随便跟,比如: std::cout << "I'm f**king" << "a" << "and b" << std::endl; 就相当于把它们连在了一起。不过注意是英文的双引号。 std::cout是什么意思?哎呀,说了你也不明白,就是一个ostream对象(果然不明白),记住cout后面跟要输出的东西就行了。 第六行可以不要的,只是为了便于我们"偷窥"输出结果。这句的实际意义是,接受一个字符输入(怎么输入?调到黑窗口,键盘输入好了再按回车呗)。但我们并不对这个输入的字符进行任何处理,所以利用它作为使程序暂停的工具。按了回车后这个函数的调用就结束了,程序就自己完成了。 第七行表示这个函数的返回值是0(同样,去掉"返回"也无妨),操作系统规定的意思是程序运行成功。 |
|
|
板凳#
发布于:2011-12-23 21:19
看到这里你肯定还是挺迷糊的:为什么那个函数名字要叫"main"啊,而且我把代码写在外面不行?为什么后面还要return?别急,我来回答你。
1.名字叫"main"是革命需要,标准规定,你要是改个名字人家编译器不认你。 2.C/C++的实现功能的代码都是写在函数里的(后面的类、函数定义和全局变量定义不用写里面)。系统在运行这个函数的时候,从main开始执行,main函数执行完了程序也就结束了。所以就算是再大的软件,只要是由C或者C++写的,都会有main函数(WinMain?其实运行的时候还是得从main开始) 3.return 0、main的返回值和参数,这些都是标准规定。 可能细心的你注意到了,main里面那3行代码末尾都有一个英文分号";"。嗯,每个C++语句(不是语句的就不算)都是由分号结束的。空格和换行什么的可以去掉,编译器不挑剔。但是代码很多时候是给人(包括你自己。神马,你不是人?)看的,所以必须注意代码的美观整洁。由于C的这个特点,还专门有一个叫做IOCCC的比赛,比哪个的程序写得臭。你去?你现在还没那么"垃圾"的水平! 给你讲个小秘密,别人我不告诉他。 在main的定义前加上一行代码"using namespace std;",后面的"std::"都可以省掉了,即 cout << "I'm f**king C++!" << endl; cin.get(); 爽吧!不过这个到底有什么玄机,为什么可以这样?嘿嘿,嘿嘿…… |
|
|
地板#
发布于:2011-12-23 21:20
作业:把你看不惯的人、想说的话,全部用你的程序发泄吧,嘿嘿。
|
|
|
4楼#
发布于:2011-12-23 21:20
Q:我老把"<<"写成">>"怎么办?
A:你把那句话想象成一盆H2O,cout想象成显示器,那H2O就和它后面的液体,按顺序"流向"显示器了,所以这也是"stream"得名的原因。 |
|
|
5楼#
发布于:2011-12-23 21:20
看完上面我又臭又长的叙述之后,你会在程序里把你讨厌的人都f**k了吧。不过今天我们这个程序要实现更高级的功能。请看:
#include <iostream> using namespace std; //前面讲的,嘿嘿 int main(void) { int age; cin >> age; cout << "You are " << age << " years old." << endl; cin.get(); //这句是为了避免一闪而过,VC用户可以无视 return 0; } 好了,编译,运行。咦?怎么一个字也没有,停着不动啊。别急,你输入个"13"(不包括这个引号),再按回车。哈哈,它神奇的输出了"You are 13 years old."。 这段代码惟一让你有疑惑的就是第六行和第七行。我们把第六行这种语句叫做“定义变量”,当然很多人也习惯叫它“声明”,不过为了与后面的“声明”区别开来,我还是统一叫它为“定义”。这句话用自然语言表述就是定义了一个变量,名字叫age(这单词你不认识?Google一下!),类型为int(Integer,整数,不过你要是写Integer编译器可不认识)。什么是变量?就是你内存里的一块空间,在你这个程序运行的时候,你变量所对应的内存空间就是属于你的程序的。那电脑怎么知道哪块内存是属于你程序,哪块内存是属于你AV播放器的呢?这里要用到内存地址的概念,指针这一节的时候会详细说它。变量的名字可以随便取,和函数命名的规定一样,不过要注意不能和函数或其他变量重名。 那么,更为重要的是,我们为什么要写这样一句话?我们先对这个程序的功能作出分析: 1.能得到用户的一个输入,输入的值表示一个年龄。 2.能输出"You are xx years old."这句话,其中的"xx"表示程序用户输入的年龄。 别笑,很多大程序也是这样分析的。因为要接收用户的输入,而我们不知道这个值是多少,所以需要一个"可以变的量"嘛。这个变量的类型是整数,可以是负整数。当然,这个变量是有取值范围的,至于这个取值范围是多少,嘿嘿,你活不到那么大(其实是我忘了……)。当然,没人的岁数是负的。所以我们可以在"int"前面加上一个"unsigned",意思是"无符号整数",直接写"unsigned"也行,这种变量的最小可取值是0。 搞了半天弄清楚了这句变量定义的原因和作用。下面是一个特别猛的语句:"cin >> age;"。"cin"和"cout"长的很像,就是双胞胎,不过一个负责输出,一个负责输入。这句话的意思能明白吧,就是把用户在窗口上的输入的值给变量age。你可以理解成"用户倒的H2O通过各种线路流到了变量age里"。然后我们才知道了用户到底想说什么。是不是觉得很神奇! 还有放在语句后的"//",这后面的内容表示注释,是给人看的,不是给编译器看的。从一行的"//"开始一直到换行,都算作注释,在高亮的IDE里面会用特别的颜色(通常是绿色和蓝色)显示。 cout可以既输出变量的值,也可以输出字符串(一串字符)的值。也就是说它什么都能吃,你神马都能往这里面倒,什么硫酸啊、过氧化氢啊……它统统给你输出到那个黑框框里。当然,我觉得这样很蛋疼,你还可以这样写(仅供参考): #include <cstdio> using namespace std; int main(void) { int age; scanf("%d", &age); printf(""You are %d years old.\\n", age); return 0; } 这样写很麻烦,但比较简洁。原理?我不告诉你,嘿嘿。 |
|
|
6楼#
发布于:2011-12-23 21:20
- 19
我等平凡人是从Hello,world学起的,不是从神马基类派生类虚函数入门的,您好好看看标题吧。 |
|
|
7楼#
发布于:2011-12-23 21:20
- 24
刚学的时候我一直年“靠特”,后来偶尔看到一个视频教程,念的是“sei ao te” |
|
|
8楼#
发布于:2011-12-23 21:21
当你写了许许多多的输入年龄或者体重输出句子,或者来骂人的程序之后,你是否觉得厌倦了呢?好吧,我们现在就只有int cout cin这3个主要的关键字,当然会倦。所以还是得好好学啊……
你肯定会想到,要是我输入的数不是整数,而是小数呢?比如我要计量的不是和我在一起的MM数,而是我的私房钱在银行存款的利率呢?别急,你能想到的,C++的设计者们也会想到。所以除了int类型之外,标准还定义了float和double这两种变量类型来表示小数。有神马区别?好好好,告诉你吧,这可是独家。 首先说在计算机中小数不叫小数,叫浮点数。在32位的系统上(这个不明白的自己Google下),一个int默认占4字节,float占用内存4字节,而double由于吃多了太胖,要占8字节的内存。由于计算机复杂的浮点数表示方式(这个要扯能扯几天几夜),浮点数的精度总会有或多或少的丢失,而由于double占空间多,所以和float相比也就精确得多。如果不是特别省内存的情况下,尽量用double,float在运算过程中会转换成double计算再转换回double,造成额外的运行时耗费。 不知道你听懂上面的话没?没听懂算了,只需要忘掉float吧,它不适合你。 #include <iostream> using namespace std; int main(void) { double x; cin >> x; //cin也是啥都能吃 cout << x * x << endl; return 0; } 程序的意思显而易见,是求输入x的平方。同样你可以把这个乘号改成加、减、或除,注意C++中没有乘幂符号"^",怎么乘方以后再说。不过我也不会蛋疼到输出个x - x……于是到这里你可以用double或int结合cin、cout完成最最基本的带用户提示的小程序了。 最后给你个C++基本类型表,你可以结合使用。 int 整数 4字节 double 双精度浮点数 8字节 float 单精度浮点数 4字节 char 单个ascii字符(通俗点就是基本的英文键盘字符) 1字节 wchar_t 宽字符(可以装下一个汉字) 2字节 bool 布尔值(取值只能是true或者false,用法你懂的) 1字节 然后在前三种类型面前可以加unsigned表示,使其不能表示负数。 |
|
|
9楼#
发布于:2011-12-23 21:21
在尝试了很多很多种变量的组合和大量的输入输出后,你还是会觉得乏味。
当然,为什么程序只能一条路走到黑啊?不会变通吗?我告诉你,可以! #include <iostream> using namespace std int main(void) { unsigned weight; //为什么是unsigned?难道你体重是负的? cin >> weight; if (weight > 80) { cout << "Fat man!" << endl; } else { cout << "Just so so!" << endl; } return 0; } 首先你把这个程序复制粘贴到你的IDE里,然后编译。咦?这次怎么没以前顺利了?我的VC2008是这样提示的: 错误 1 error C2144: 语法错误 : “int”的前面应有“;” d:\\my documents\\visual studio 2008\\projects\\cplusplus\\test\\test\\main.cpp 4 杰物,你TM傻x啊,给老子错的程序,肯定有人心里会这样想。不过编译器都仁至义尽了,该你自己解决了。人家说"int"前面缺分号,你就加上一个呗。 ;int main(void) 不过这样怎么看怎么别扭,还是移到"std"后面去吧。嗯,世界清净了,程序运行了。你输入90,就说你是胖子,你输入50,就说你Just so so。不错,不错。 关于if和else……我开讲语法了。 if判断语句的格式是 if (condition) { // 当满足condition时执行的语句 } else { // 当不满足condition时执行的语句 } 当然,如果看不惯,大可不必像我这样。你同样可以 if(conditon) { //语句 } else {//语句 } 代码写得如何,那是你的自由。写得太烂被人骂,同样是你的自由。我无权干涉。 当if或者else里的语句只有一条的时候,可以不写大括号。当然,我习惯一直写,而且是这样写。 如果要满足多种情况判断的时候,还可以有else if子句。 if (condition1) { // 语句1 } else if (condition2) { // 注意不要发生逻辑错误 // 语句2 } else { // 语句3 } 基本语法说的就这么多…不过有一个很重要的问题,也是许多熟悉C/C++的程序员常犯的错误,那就是"Hanging else"(悬挂的else)。这是神马?有代码,有真相。 if (age < 30) if (weight > 75) // xxx else // xxx 把这段代码按照这样的缩进格式按自己的喜好补充,注意xxx那里只能填一行代码,因为没有大括号。你会发现这个程序的运行结果并不如你所料——其实else是和第2个if配对的!编译器只会让else和最近的if配对。要避免这种情况的发生,就是统统写大括号。 if (age < 30) { if (weight > 75) { // xxx } } else { // xxx } 这样就好了嘛。 最后补一句忘了说的话。C++可是区分大小写的,你定义了变量age,它可不认识Age! |
|
|
10楼#
发布于:2011-12-23 21:22
注意,百度会吃掉4空格以上的缩进,所以我的缩进要是被吃了,你懂的。当然,你也可以根据自己的喜好弄2空格缩进或者Tab缩进。
|
|
|
11楼#
发布于:2011-12-23 21:23
- 30
1.考虑过这个,不过此“关键字”不是C++标准概念中的“关键字”。 2.sorry,这个我没有自己试。 3.我当时觉得没必要,说到字符串的时候再来提吧。 |
|
|
12楼#
发布于:2011-12-23 23:03
安装程序都没教就开始教教程了啊
|
|
13楼#
发布于:2012-03-14 23:24
{:soso_e179:}
|
|
14楼#
发布于:2013-01-06 16:50
楼上的稍等啦
|
|
上一页
下一页