一直想系统的学习一遍C++,奈何总是坚持不下来,因此开了这个系列,希望能督促自己完成学习,同时也向大家分享所学。
开发环境:
【windows 10】 x64
【visual studio 2015】
参考书目:C++ primer plus
写在前面:
在visual studio 2015中,程序运行结束后,将会自动关闭窗口,因此为了查看输出,需要在程序最后加上若干个
cin.get();
cin.get()读取下一次键盘输入,这条语句就让程序等待,直到按下Enter键。有时我们的程序会有输入,因此需要多个cin.get();语句
或者输入:
system("pause");
程序源代码地址:https://github.com/buaadf/learncpp
git:git clone git@github.com:buaadf/learncpp.git
1、开始学习C++
程序2.1
//第一个C++程序,显示一条消息
#include<iostream>
int main()
{
using namespace std;
cout << "Come up and C++ me some time.";
cout << endl;
cout << "You won't regret it!";
cin.get();
return 0;
}
一个C++程序包含下述元素:
- 注释:由前缀//标识;
- 预处理器编译指令:#include;
- 函数头:int main();
- 编译指令:using namespace;
- 函数体:用{}括起;
- 使用C++的cout工具显示消息的语句;
- 结束main()函数的return语句。
1.1 main()函数
int main()
{
statements;
return 0;
}
函数定义:
函数头对函数与程序其他部分之间的接口进行了总结;函数体具体描述了函数应做的指令。
在C++中每条语句都必须以分号结束。
1.2 C++预处理器和iostream文件
#include <iostream>将iostream文件的内筒添加到程序中,C++的输入输出方案设计iostream文件中的多个定义,为了使用cout来显示消息,则需要这些定义。
#include指令将iostream文件的内容随源代码文件的内容一起发送给编译器。实际上,iostream文件的内同将取代程序中的代码行#include <iostream>。
使用cin和cout的程序必须包含iostream。
1.3 名称空间namespace
在iostream中定义的cout实际上是std::cout,endl实际上是std::endl,他们都在名称空间std中,如果这样书写的话会很麻烦,因此在程序中加上一句
using namespace std;便可省去std::前缀
1.4使用cout进行输出
cout << "Come up and C++ me some time.";双括号引起的部分是要打印的消息(字符串)。
<<表示该语句把这个字符串发送给cout。
cout是一个预定义的对象,可显示字符串、数字、单个字符等。
1. 控制符endl
cout << endl;
表示重起一行
2. 换行符\n
cout << "What's next?\n";
2. C++语句
程序2.2
//carrots.cpp
#include<iostream>
int main()
{
using namespace std;
int carrots;
carrots = 25;
cout << "I have " << carrots << " carrots."<<endl;
carrots = carrots - 1;
cout << "Crunch, crunch. Now I have " << carrots << " carrots." << endl;
cin.get();
return 0;
}
2.1 声明语句和变量
int carrots;变量必须声明
C++的做法是尽可能在首次使用变量前声明它。
2.2 赋值语句
赋值语句将值赋给存储单元。
= 赋值运算符
C++(和C不同)可以连续使用赋值运算符,下面的代码是合法的:
int steinway;
int baldwin;
int yamaha;
yamaha = baldwin =steinway =88;
赋值将从右向左进行。
2.3 cout
cout << carrots;打印的是存储在carrots中的整数值;cout可用于字符串和数字。
与C语言比较:
printf("Printing a string: %s\n","25");
printf("Printing an integer: %d\n",25);
3其他语句
程序2.3
//getinfo.cpp input and output
#include <iostream>
int main()
{
using namespace std;
int carrots;
cout << "How many carrots do you have?" << endl;
cin >> carrots;
cout << "Here are two more. " << endl;
carrots = carrots + 2;
cout << "Now you have " << carrots << " carrots." << endl;
cin.get();
cin.get();
return 0;
}
3.1 cin
cin >> carrots;
从键盘键入的值赋给carrots。信息从cin流向carrots。
3.2 使用cout进行拼接
cout << "Now you have " << carrots << " carrots." << endl;
cout << "Now you have ";
cout << carrots;
cout << "carrots";
cout << endl;
cout << "Now you have ";
<< carrots;
<< "carrots";
<< endl;
cout语句的输出紧跟在前一条后面,没有换行。
3.3 类简介
类指对于对象 就像 类型之于变量;
类定义描述的是数据格式及其用法,而对象则是根据数据格式规范创建的实体。
类好比所有著名演员,对象好比某个著名演员。
cout是一个ostream类对象。
ostream类定义描述了ostream对象表示的 数据以及可以对它进行的操作,如将数字或字符串插入到输出流中;
cin是一个istream对象,也是在iostream中定义的。
注意:类描述了一种数据类型的全部属性(包括可使用它执行的操作),对象是根据这些描述创建的实体。
类是用户定义的类型,但是我们并没有设计ostream和istream类,就像函数可以来自函数库一样,类也可以来自类库。
4. 函数
4.1 有返回值的函数
有返回值的函数将生成一个值,这个值可赋给变量或在其他表达式中使用。
x = sqrt(6.25); //返回6.25的平方根(2.5)并将它赋给x
sqrt的函数原型像这样:
double sqrt(double);第一个double意味着sqrt()将返回一个double值。第二个double意味着sqrt()需要一个double参数。
原型结尾的分号表明它是一条语句,这使得它是一个原型,而不是函数头。如果省略分号,编译器将把这行代码解释为一个函数头,并要求接着提供定义该函数的函数体。
对于c++库中的每一个函数,都在一个或多个头文件中提供了原型。
应在首次使用函数之前提供其原型。
通常的做法是把原型放到main()函数定义的前面。
程序2.4
//sqrt.cpp
#include<iostream>
#include<cmath> //or math.h
int main()
{
using namespace std;
double area;
cout << "Enter the floor area, in square feet, of your home: ";
cin >> area;
double side;
side = sqrt(area);
cout << "That's the equivalent of the square " << side
<< " feet to the side." << endl;
cout << "How fascinating!" << endl;
cin.get();
cin.get();
return 0;
}该程序通过包含cmath文件来提供该函数的原型。
4.2 函数变体
有些函数需要多项信息,这些函数使用多个参数,参数间用逗号分开。
例如,pow()接受两个参数,返回值为以第一个参数为底,第二个参数为指数的幂,函数原型为:
double pow(double,double);
另外一些函数不接受任何参数,例如,cstdlib(或stdlib.h)包含一个rand()函数,该函数不接受任何参数,返回一个随机整数,该函数的原型如下:
int rand(void);
void可省略。
还有一些函数没有返回值,函数原型如:
void bucks(double);由于它不返回值,因此不能将该函数调用放在赋值语句或其他表达式中,应使用一条纯粹的函数调用语句:
bucks(1234.5678);
4.3 用户定义的函数
程序2.5
//ourfunc.cpp
#include<iostream>
void simon(int); //function prototype for simon()
int main()
{
using namespace std;
simon(3);
cout << "Pick an interger: ";
int count;
cin >> count;
simon(count);
cout << "Done!" << endl;
cin.get();
cin.get();
return 0;
}
void simon(int n)
{
using namespace std;
cout << "Simon says touch your toes " << n << " times." << endl;
}
type functionname(arguementlist)
{
statements
}
和C一样,C++不允许将函数定义嵌套在另一个函数定义中。每个函数定义都是独立的,所有的函数创建都是平等的。
2.函数头
void simon(int n)
开头的void表明simon()没有返回值,因此调用simon()不会生成可在main()终将其赋给变量的数字。
括号中的int n表明应提供一个int参数
main()的函数头:
int main()
开头的int表明,main()返回一个整数值了;空括号(其中可以包含void)表明main()没有参数。因此在main()结为使用下属语句:
return 0;这在逻辑上是一致的:main()返回一个int值,而程序要求他返回0。这个值返回到哪里去了?
答案是,可以将计算机操作系统看做调用程序。因此,main()的返回值并不是返回给程序的其他部分,而是返回给操作系统,很多操作系统都可以使用程序的返回值。通常的约定是,退出值为0意味着程序运行成功。
4.4 用户定义的有返回值的函数
程序2.6
//convert.cpp
#include<iostream>;
int stonetolb(int); //function prototype
int main()
{
using namespace std;
int stone;
cout << "Enter the weight in stone: ";
cin >> stone;
int pounds = stonetolb(stone);
cout << stone << " stone= "
<< pounds << " pounds." << endl;
cin.get();
cin.get();
return 0;
}
int stonetolb(int sts)
{
return 14 * sts;
}
stonetolb()用关键字return将14*sts返回给main()。这表明return后面并非一定得跟一个简单的数字。
通常,在可以使用一个简单常量的地方,都可以使用一个返回值类型与该常量相同的函数。
函数:有函数头和函数体;接受一个参数;返回一个值;需要一个原型。
4.5 在多函数程序中使用using编译指令
在程序2.5中,两个函数中都包含下面一条using编译指令:
using namespace std;可将编译指令放在函数的外面,且位于两个函数的前面。
当前通行的理念是,只让需要访问名称空间std的函数访问它是更好的选择。例如在程序2.6中,只有main()函数使用cout,因此没有必要让函数stonetolb()访问std。因此编译指令using被放在函数main()中,使得只有该函数能够访问名称空间std。
9万+

被折叠的 条评论
为什么被折叠?



