C++ 学习笔记 第一章和第二章

1 C++简介

这一段可以自己看一下,都是一下无关急要的简述。

2 开始学习C++

//MyFrist.cpp
#include<iostream>
using namespace std;
int main(){
    cout << "Come up and C++ me some time.";
    cout << endl;
    cout << "You won't regret it!" << endl;
    system("pause");
}
// Author: 崔小葵
// Data: 2020-10-12

2.1 进入C++

2.1.1 main()函数的基本结构

int main(){
	statements //信息的主体部分
	return 0;
	system("pause"); //这一行主要是为了能够让控制台不闪退,VScode中会有用处。
}

(statements为函数的主体部分,可以在这个部分写函数语句。)

2.1.2 函数头

main() //original C style
int main(void) //very explicit style
void main()

在C语言中,省略返回类型相当于说函数的类型为int。而C++逐渐的淘汰这种用法;
第二行中在括号中使用关键字void明确的指出,函数不接受任何参数。在C++(不是C)中,让括号空着与括号中使用void等效(在C中,让括号空着意味着对是否接受参数保持沉默);
第三行中可以直接使用这种函数头,同时省略返回语句;

2.1.3 C++预处理器和iostream文件

#include<iostream>
using namespace std;

iostream中io指的是输入(in-进入程序的信息)和输出(out-从程序中发送出的信息)。C++的输入/输出方案中涉及到iostream文件中多个定义。为了使用cin来输入数据和cout输出数据
,第一个程序需要这些定义。#include编译指令导致iostream文件的内容随源代码文件的内容一起发送给编译器。实际上,iostream文件的内容将取代程序中代码行#include< iostream >。原始文件没有被修改,而是,将源代码文件和iostream组合成一个符合文件,编译下一阶段将使用该文件。
像iostream这样的文件叫做包含文件(includeing file)----由于它们被包含在其他文件中;也叫头文件(header file)
在这里插入图片描述
这个表格很好的解释了为什么C与C++的头文件定义不同点

2.1.4 名称空间

如果使用iostream,而不是iostream.h,则应使用下面的名称空间编译指令来使iostream中的定义对程序可用;

using namespace std;

这叫using编译指令。类、函数很变量便是C++编译器的标准组件,它们现在都被安置在名称空间std中。
当且仅当头文件中没有扩展名h时,情况才是如此。这意味着在iostream中定义的用于输出的cout变量实际上是std::cout,而endl实际上是std::endl。因此,可以省略编译指令using,以下述方法进行编码;

std::cout << "Come up and C++ me some time.";
std::cout << std::endl;
std::cout << "Come up and C++ me some time.<< std::endl"

using指令的出现,其实是一种可以偷懒的方法。

using std::cout; //Correspond to cout
using std::endl; //Correspond to endl
using std::cin;  //Correspond to cin

加上using namespace std;是一种lazy approach。

2.2.5 cout

cout对象有一个简单的接口,如果string是一个字符串.,则下面的代码将显示该字符串;

cout << string;

在这里插入图片描述

2.1.6 endl\n的区别

endl是一种特殊的C++符号,表示一个重要的概念:重起一行
而在C++编译器中,我们看一段代码就可以明白;

#include<iostream>
using namespace std;
int main(){
    cout << "The Good, The";
    cout << "Bad, " << endl;
    cout << "and the Ukulele";
    cout << endl;
    system("pause");
}

在这里插入图片描述

C++中还提供了另一种在输出中只是换行的旧式方法:C语言符号\n;

#include<iostream>
using namespace std;
int main(){
    cout << "The Good, The";
    cout << "Bad,\n " ;
    cout << "and the Ukulele";
    cout << endl;
    system("pause");
}


虽然这边的区别还不是很大,但是在C++中是这样定义的

template <class _CharT, class _Traits>
inline _LIBCPP_INLINE_VISIBILITY
basic_ostream<_CharT, _Traits>&
endl(basic_ostream<_CharT, _Traits>& __os)
{
    __os.put(__os.widen('\n'));
    __os.flush();
    return __os;
}

很容易看出来,endl做了三件事儿(把大象装冰箱需要几步?(划掉):

1.把\n放到输出流的缓冲区中;
2.把缓冲区的内容刷新到设备中;
3.返回输出流。

endl被称作是C++中的操纵符(manipulator),但实质上它如上面所看到的,是一个函数模板。
事实上这边我也不是特别懂,后续更新中会进一步解释的
endl确保程序继续运行前刷新(将其立即显示在屏幕上);而使用\n不能提供这样的保证,这意味着在有些系统中,又是可能在你输入信息后才会出现提示。

2.2 C++语句

#include<iostream>
using namespace std;
int main(){
    int carrots;
    cin >> carrots;
    cout << "I have " << carrots << "carrots." << endl;
    carrots = carrots - 1;
    cout << "Crunch, crunch. Now I have " << carrots << "carrots." << endl;
    system("pause");
}
// Author: 崔小葵
// Date: 2020-11-12

2.2.1 声明语句和变量

在C++中int代表整数,但是与C中的int有区别,C++的int类型可以为正,也可以为负。在之后的第三章会着重介绍。

int carrots;

这条语句提供了两项信息:

  1. 需要内存以及该内存单元的名称。—— 这条语句指出程序需要足够的存储空间来存储一个整数。
  2. 给存储单元指定名称。—— 这里用carrots来表示存储在该单元的值。

程序中的声明语句叫做定义声明(defining declaration)语句,这意味着它将导致编译器为变量分配内存空间。在较为复杂的情况下,还可能有引用声明(reference declaration)。
变量声明:
在这里插入图片描述

2.2.2 赋值语句

符号=叫做赋值运算符
在C++中有一个与C不寻常的特性———可以连续使用赋值运算符。

int a;
int b;
int c;
a=b=c=710;

在C++中赋值运算是从右向左的
就是先将710赋值给c;然后,c的值(现在的710)被赋值给b;最后b的值被赋值给c。

2.3其他C++语句

#include<iostream>
using namespace std;
int main(){
    int carrots;
    cout << "How many carrots do you have ? ";
    cin >> carrots;
    cout <<"Here are two more, ";
    carrots =carrots + 2;
    cout <<"Now you have "<< carrots <<" carrots." << endl;
    system("pause");
}
// Author: 崔小葵
// Date: 2020-10-13

在这里插入图片描述

2.3.1 使用cin和使用cout进行拼接

上述程序的输出表明,从键盘中键入的(12)最终被赋值给变量carrots

cin >> carrots;

从这条语句中,我们可以知道信息从cin流入到carrots

//片段一
cout <<"Now you have "<< carrots <<" carrots." << endl;
//片段二
cout <<"Now you have ";
cout << carrots ;
cout <<" carrots." ;
cout << endl;
//片段三
cout <<"Now you have "<< carrots ;
 	 <<" carrots." ;
	 << endl;

在上述代码中,我们可以发现其最后的输出都是一样的;
在C++中规定———C++的自由格式规则将标记间的换行符和空格看作是可以相互替换的(当代码行很长,限制输出的显示风格时,最后一种技术是很方便的)。

C++中将输出看作是流出程序的字符流一样,它也将输入看作是流入程序的字符流。iostream文件中将cin定义为一个表示这种流的对象,输出时,<<运算符将字符串插入到输出流中;输入时,cin使用>>运算符从输入流中抽取字符。通常在运算符左侧提供变量,以抽取的信息(符号<<>>被选择用来指示信息流的方向)

2.3.3 类简介

类是用户定义的一种数据类型。
类定义描述了一种数据类型的全部属性(包括可使用它的执行的操作),对象根据根据这些描述创建实体。
在这里插入图片描述

2.4 函数

2.4.1使用有返回值的函数

#include<iostream>
#include<cmath>
using namespace std;
int main(){
    double area;
    cout << "Enter the floor area, in square feet, of you home: ";
    cin >> area;
    double side;
    side = sqrt( area );
    cout << "That's the equivalent of a square " << side << " feet to the side." << endl;
    cout << "How fanscinating!" << endl;
    system("pause");
}
// Author: 崔小葵
// Date: 2020-10-13

在这里插入图片描述
注意: 如果使用老式编译器,则必须在程序清单中使用#include<math.h>,而不是#include<cmath>.
由于sqrt( )处理的是double值,因此这里将变量声明为这种类型。声明double变量的句法与声明int变量相同;

2.4.2 函数变体

有些函数需要多项信息。这些函数使用多个参数,参数间用逗号分开。

//片段一
answer = pow( a , b ); //函数是计算a的b次方
//片段二
int rand(void);
//片段三
void buck(double);
bucks(a);

在这三个片段中

  1. pow()接受两个参数,返回值为以第一个参数为底,第二噶参数为指数的幂。
  2. rank()函数,返回一个随机数;关键字void明确指出,该函数不接受任何参数。而如果让括号为空,则C++将其解释为一个不接受任何参数的隐式声明。可以这样使用该函数。
  3. 原型中使用关键字void来指定返回类型,以指出该函数没有返回值。

2.4.3 用户定义的函数

#include<iostream>
using namespace std;
void simon(int );
int main(){
    simon(3);
    cout << "Pick an integer: ";
    int count;
    cin >> count;
    simon(count);
    cout << "Done" << endl;
    system("pause");
}
void simon(int n){
    cout << "Simon says touth your toes " << n <<" times." << endl;
}
// Author: 崔磊
// Date: 2020-10-13

在这里插入图片描述
这可能是一个比较恶搞的代码吧
main()函数两次调用simon()函数,一次的参数为3,另一次的参数为变量count.

1.函数格式

函数的定义与main()的定义采用的格式相同

type functionname(argumentlist){
	statements
}

注意: 定义的源代码位于main()的后面。和C一样,但C++不允许将函数定义嵌套在另一个函数的定义中。每一个函数定义都是独立的,所有函数的创建都是平等的。

2.函数头

上述程序中simon()函数的函数头如下:

void simon(int n);

开头的void表明simon()没有返回值,因此调用simon()不会生成可在main()中将其赋给变量的数值。
括号中的int n表明,使用simon(),应提供一个int参数。
C++中的int、void、return和double等。由于这些关键字都是C和C++专用的,因此不能作他用。也就是不能作为变量名。

3.函数的特性
  1. 有函数头和函数体
  2. 接受一个参数
  3. 返回一个值
  4. 需要一个原型

2.4.4 用户定义的有返回值的函数

#include<iostream>
using namespace std;
int stonetolb(int);
int main(){
    int stone;
    cout << "Enter the weight int stone: ";
    cin >> stone;
    int pounds = stonetolb(stone);
    cout << stone << " stone = " << pounds << "pounds." << endl;
    system("pause");
}
int stonetolb(int sts){
    return 14 * sts;
}
// Author: 崔小葵
// Date: 2020-10-13
// 注解:一英石等于十四磅
//片段一
int stonetolb(int sts){
    return 14 * sts;
//片段二
int stonetolb(int sts){
    int pounds = 14 * sts;
    return pounds;

在上述代码中,程序都将要计算返回值,然后在语句中使用这个值
这里片段一和片段二所产生的效果是一样的,这里通过使用较为复杂的表达式,避免了创建一个新变量。
在这里插入图片描述

参考书籍C++ primer plus 第二章

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值