【C++】学习笔记一

一直想系统的学习一遍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;
}


用cout输出字符,注意cout必须全为小写。

一个C++程序包含下述元素:
  • 注释:由前缀//标识;
  • 预处理器编译指令:#include;
  • 函数头:int main();
  • 编译指令:using namespace;
  • 函数体:用{}括起;
  • 使用C++的cout工具显示消息的语句;
  • 结束main()函数的return语句。


1.1 main()函数

int main()
{
        statements;
        return 0;
}


这几行表明有一个名为main()的函数,并描述了该函数的行为。
函数定义:



函数头对函数与程序其他部分之间的接口进行了总结;函数体具体描述了函数应做的指令。
在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

在使用函数之前,C++编译器必须知道函数的参数类型和返回值类型——使用函数原型语句。

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;
}


1.函数格式
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。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值