#include <iostream>
int main()
{
using namespace std;
int carrots;
carrots = 25;
cout << "I have ";
cout << carrots;
cout << " carrots.";
cout << endl;
carrots = carrots - 1;
cout << "Crunch,crunch.Now I have " << carrots << " carrots." << endl;
return 0;
}
运行结果:
I have 25 carrots.
Crunch,crunch.Now I have 24 carrots.
首先引入一个概念:
C++程序中最小的独立单位是语句(statement)。它相当于一篇文章中的一个句子。句子是用句号结束的。语句一般是用分号结束的(复合语句是以右花括号结束的)。
一、声明语句和变量
1.声明语句
定义
声明语句(declaration statement)是用来引入或定义程序中标识符(如变量、函数、类型等)的语句。在C++中,声明语句告诉编译器某个变量、函数或对象的存在及其类型,但通常不会为其分配存储空间(除非是定义)。
int a; // 声明了一个整型变量a
注:在 C++ 中,所有变量都必须声明。
定义语句提供的两个信息
- 需要的内存:int 表示整数,后面会学到,
int
通常占用 4 字节的内存空间(具体取决于系统和编译器)。 - 该内存单元的名称:变量名为
a
,以后可以通过a
来访问这块内存。
程序中的声明语句叫定义声明语句,简称为定义。
声明与定义的区别
- 声明仅仅是告知编译器标识符的存在,如变量或函数的类型,但不一定为其分配内存。
- 定义不仅告知编译器标识符的存在,还为其分配内存(例如定义变量或函数)。
2.变量
什么是变量?顾名思义,是一种可以变化的量。在编程中,变量本质上是一个命名的内存位置,用于存储数据。我们给内存中的某个位置一个名称,这样就可以通过这个名字轻松地访问或修改存储在该位置的数据。
变量是程序中的一个命名存储位置,用于存储可以改变的数据值。在C++中,变量的类型决定了它可以存储的数据类型,以及该变量占用的内存空间。
有关变量的内容,下篇博客再细讲。
二、赋值语句
carrots = 25;
定义
赋值语句(assignment statement)是用于将某个值赋给内存单元的语句。
赋值运算符
符号 = 叫做赋值运算符。再 C++ 中,可连续使用赋值运算符。
例如,这样写是完全合法的:
a = b = c = 20;
赋值操作从右往左进行。在这里,首先,20 赋给 c,c(现在是 20)赋给 b,b(现在也是 20)赋给 a。
复合赋值运算符
细心的读者可能会发现这个特殊的赋值语句:
carrots = carrots - 1;
我们来解析一下这个语句:将 carrots - 1 的值再次赋给 carrots ,也就是说,carrots 相较于原来减少了1。
复合赋值运算符(compound assignment operators)是C++中一种简化赋值运算的方式,它将运算符与赋值运算符
=
结合在一起,形成 += , -= , *= , /= 和 %= 。既进行运算,又进行赋值操作。使用复合赋值运算符可以减少代码量并提高可读性。
至于这些符号是什么意思,以后再讲。
三、cin 的使用
cin >> carrots;
和 cout 一样,在使用 cin 之前,也必须引用 iostream 头文件,也就是说, cin 属于输入流的一种。
也就是说,这条语句的意义是将信息传入到变量 carrots 当中。
四、cout 的拼接
cout << "Now you have " << carrots << " carrots" << endl;
cout << "Now you have "
<< carrots
<< " carrots"
<< endl;
cout << "Now you have ";
cout << carrots;
cout << " carrots";
cout << endl;
以上三种情况的输出完全一致,一般来说,根据有关 cout 的建议,一般使用第二种方式。
五、简单 OOP —— 类简介
至此,我们开始步入面向对象编程( OOP )的殿堂了。
类是面向对象编程(OOP)中的一个核心概念,代表一种用于定义对象的模板或蓝图。类描述了一组具有相同特性和行为的对象的结构,规定了对象的属性(数据成员)和功能(成员函数)。
类的定义与对象
- 类是一个抽象的定义,用于描述事物的共性。类本身不占用实际内存,直到创建了对象(实例)。
- 对象是类的具体实例。通过类的定义,可以创建多个对象,每个对象都有类中的属性和方法。
int a;
例如,前面说的变量声明,是类的成员变量。
说实话,这里安排学习类,我觉得有些不妥。对于我来说,有一些难理解。
可参见:
六、函数
C++ 函数分为两种:
- 有返回值的
- 无返回值的
1.有返回值的函数
x = sqrt(6.25);
表达式 sqrt(6.25) 表示要调用 sqrt() 函数。
表达式 sqrt(6.25) 称为函数调用;
被调用的函数叫做被调用函数;
包含函数调用的函数叫做调用函数。
圆括号中的值是参数列表,是发送给变量的信息;
将函数的计算结果的值赋给 x ,赋给 x 的值被称为返回值;
简单来地说,参数是发送给函数的信息,返回值是从函数发出的信息。
在使用 sqrt() 时,必须提供原型,可以通过以下方法实现:
- 在源代码文件中输入函数原型;
- 包含头文件 cmath ,其中定义了原型。
函数原型(Function Prototype)是在C++中用于声明函数的方式,告诉编译器该函数的名称、返回类型、参数类型等信息,便于在函数定义之前使用该函数。它类似于函数的“声明”,而不是具体的实现。函数原型通常放在程序的开头,或者放在头文件中,主要用于在实际调用函数之前告知编译器函数的结构。
但是,函数 sqrt() 到底是什么意思呢?
sqrt() 是 C++ 标准库中用于计算平方根的函数,属于 <cmath> 头文件。该函数接受一个非负数作为参数,并返回该数的平方根。
我们都知道,一个数的平方根有正、负两个,但是,sqrt() 仅返回该数的正平方根
我们可以说:
sqrt() 返回该数的算数平方根。
在上面的例子中,函数的参数 6.25 是一个浮点数,返回值 2.5 也是一个浮点数,所以,我们可以倒退 sqrt() 的函数原型为:
double sqrt(double);
在编写函数时,必须定义参数类型和返回值类型。在这里,参数类型和返回值类型都为double。
2.函数变体
前面提到,圆括号是参数列表,之所以称之为列表,是因为有些函数可以接受多个参数。也就是说,下面这样是完全合法的。
double pow(double,double);//函数原型
answer = pow(5.0,8.0);
函数 pow() 接受两个参数,前者为底数,后者为指数。
补习初中知识
前面提到过,我们可以用关键字 void 指出函数不接受参数或无返回值。
3.用户定义的函数
C++提供了 140 多个库函数,有时候,我们需要自己定义函数来满足需求。
1)函数格式
type functionname (argumentlist)
{
statements
}
2)函数头
有关函数头的知识,Day2 中做了详细介绍,这里不再赘述,感兴趣者移步上一篇博客:
3.用户定义的有返回值的的函数
int stonetold(int sys)
{
int pounds = 14 * sys
return pounds;
}
在这个程序中,关键字 return 将 pounds 的值作为返回值,也就是说,函数 stonetold(int sys) 的返回值为 14 * sys。
这时候,我们再进行这样的操作:
int number = stonetold(4)
计算结果就是 56,也就是说,number 的值就是 56。
虽然函数 stonetold() 短小简单,但是它包含了函数的所有特征:
- 有函数头和函数体;
- 接受一个参数;
- 返回一个值;
- 需要一个原型。
关于函数更深奥的东西,以后再细讲。
七、共勉
本篇博客是自我学习笔记,如果后续能够有人能够从中汲取到知识和收获,这也是我所希望的。如果有读者不懂或有问题的话,欢迎提出来,让我们一起讨论。同时,我将继续更新 C++ 入门学习系列笔记,敬请期待。
谢谢!
拔叔镇楼