本文概述
- 前言
- 第一个C++程序:Hello World
- C++术语和语法
- C++编译过程简介
- 使用cout <<输出
- 使用cin>>作为输入
- 使用变量:变量是什么?
- 基本算术操作符
- While循环语句
- 条件语句
- 总结
前言
本系列教程试图详细解读C++,本文首先是C++编程的入门详细指南。鉴于我之前一直都是断断续续学C++的,所以打算用一段时间一次性解决C++的基本问题,虽然不能全部解决,但期望能更加熟悉C++,而在开发中不用浪费过多的时间在C++如语法问题上。
本文使用Visual Studio作为基本编程环境,如果你还没安装,需要预先安装好。
第一个C++程序:Hello World
新建一个源码文件:main.cpp,输入如下内容:
#include <iostream> // 导入头文件, 用于IO操作
/**
* 第一个C++程序
*/
int main(int argc, char **argv) { // 程序入口
std::cout << "Hello World" << std::endl; // 输出字符串
return 0;
}
然后点击Visual Studio的调试>开始执行(不调试)即可构建并执行程序,或直接使用快捷键Ctrl+F5。
简短解释:
- /* …… */和//:分别是多行注释和单行注释,注释不会被执行或解释,仅用于注释源码。
- #include:这是一个预处理命令,预处理命令以#符号开始,#include<iostream>表示导入IO操作相关的头文件。预处理命令在编译器预处理阶段被处理,头文件的内容会被替换到当前位置。
- Int main(){}:C++主函数,程序的主入口。
- std::cout和std::endl:std是标准模板库的命名空间,每个库有自己独立的命名空间,用于解决符号重复等问题。Cout和endl来自iostream,在std命名空间中,cout是一个标准输出,<<是一个操作符,用于输出内容到屏幕上,endl是一个换行符。
- Return 0:函数返回值,主函数默认返回0。
C++术语和语法
- 语句:语句是程序的最基本动作,语句以分号(;)结束。
- 预处理指令:以#开始的指令,#include是一个文件包含指令,不是一个语句。
- 块:以{}括起来的内容为一个块,一个块包含若干的语句,一个块又作为程序的基本单元。Main函数后面跟着的是一个函数块。
- 注释:多行注释使用/*开始,以*/结束,单行注释以//开始。
- 空格:空格有利于让代码更整洁。
- 符号大小写:C++是大小写敏感的,a和A是两个不同的变量。
C++编译过程简介
- 编写源代码:我们首先编写cpp/cxx源文件和头文件.h,一般在IDE或其它编辑器中编写。
- 预处理:编译器获取源文件和头文件,对其进行预处理,根据文件中的预处理进行符号替换,替换后的内容为完整的代码。
- 编译:编译器将预处理后的源文件进行编译,将代码编译为二进制文件,这是一个翻译过程。这些二进制文件一般以.o为.obj作为后缀名。
- 链接:编译得到的二进制文件还不能直接被执行,编译器需要将当前程序依赖的库链接进来,并最终得到一个可执行文件。
- 加载和运行:程序在运行之前会被加载到内存中,其中可能加载一些需要的动态库,如windows下的dll文件,linux下的so文件。并最终由CPU执行所有这些指令。
使用cout <<输出
std是一个命名空间,C++标准库的命名空间是std,一般每个库对于一个命名空间,例如Boost库的命名空间为boost。
另外为什么上面的例子不使用using namespace std呢?建议不要这样用,养成一个习惯:要用什么直接用命名空间指定,因为有可能两个命名空间中都有相同的符号,一来可能出错,而来看代码的人看到头晕。
::是一个域操作符,命名空间定义了一个域,另外类也属于一个域,使用A::B表示访问在A中的B。
<<是一个操作符(类似函数,只是这个函数使用一个操作符表示了),cout是一个ostream实例对象,cout<<arg,arg是该函数的一个参数,该函数返回cout对象,所以你可以重复使用<<进行连续输出。这个内容属于运算符重载,就不多说了,后面学到运算符重载你自然就明白了。
使用cout<<可以在屏幕上输出你想要的内容,目前你可以想到输出的内容包括字符串或数值,需要使用<<分开输出,例如:
std::cout << "1 + 4 = " << (1 + 4) << std::endl;
std::cout << "La " << "Oreja" << " De Van Gogh" << std::endl;
使用cin>>作为输入
如果我们需要从命令行中获取用户输入,可以使用cin>>(variable),其中variable是接收输入的变量,例如:
#include <iostream>
int main() {
std::string name; // 声明字符串变量
int age; // 声明整数变量
std::cout << "Enter Name: "; // 输出字符串
std::cin >> name; // 获取用户输入
std::cout << "Enter Age : ";
std::cin >> age;
std::cout << "Your Name is: " << name << ", age is: " << age << std::endl;
return 0;
}
其中cin>>也可以连续获取用户输入,例如std::cin>>A>>B,在获取第一个输入后,立即获取第二个输入。
使用变量:变量是什么?
计算机程序用于操作数据,变量用于储存数据,因为我们可以更改这些数据,所以又称为变量。
准确来说,一个变量是一个被标记的存储空间,它储存特定类型的数据。一个变量有一个名称,一个类型和一个值。
- 变量的名称又称为标识符,例如number,str,my_name,usname等等。变量的名称唯一标识一个变量,我们使用该名称来操作变量的值。
- C++属于强类型的语言,每个变量都有一个类型,不同类型的变量储存的数据大小是不一样的,例如char类型的变量对应1个字节的空间,而int类型的变量一般对应4个字节的空间。使用什么类型的变量决定了它的数据大小,每次操作变量的字节大小。
- 变量的值和类型一一对应,一种类型的变量只能储存该类型的值。
- 访问变量的值可以直接使用变量的名称,还有一种普遍的形式是使用指针,这个后面再说。
要使用变量,你首先要声明变量的名称和类型,下面是变量声明的常见形式:
// 语法:声明指定类型的变量
var-type var-name;
// 例子:
int sum;
double radius;
// 语法: 声明同一类型的多个变量
var-type var-name-1, var-name-2,...;
// 例子:
int sum, difference, product, quotient;
double area, circumference;
// 语法: 声明一个指定类型的变量,并初始化该变量
var-type var-name = initial-value;
// 例子:
int sum = 0;
double pi = 3.14159265;
// 语法: 声明多个变量,并同时初始化变量
var-type var-name-1 = initial-value-1, var-name-2 = initial-value-2,... ;
// 例子:
int firstNumber = 1, secondNumber = 2;
基本算术操作符
操作符 | 解释 | 例子 |
+ | 加法 | x + y |
- | 减法 | x - y |
* | 乘法 | x * y |
/ | 除法 | x / y |
% | 取模 (余数) | x % y |
++ | 递增1 | ++x or x++ |
-- | 递减1 | --x or x-- |
例子如下:
#include <iostream>
using namespace std;
int main() {
int number1, number2; // 定义两个整型变量number1 and number2
int sum, difference, product, quotient, remainder; // 定义5个int型变量
// 提示用户输入两个整数
cout << "输入两个整数 (使用空白分隔): ";
cin >> number1 >> number2;
// 算术操作
sum = number1 + number2;
difference = number1 - number2;
product = number1 * number2;
quotient = number1 / number2;
remainder = number1 % number2;
cout << "和, 差, 积, 商, 余数 "
<< number1 << " => " << number2 << " "
<< sum << ", "
<< difference << ", "
<< product << ", "
<< quotient << ", "
<< remainder << endl;
// 递增和递减
++number1;
// 相当于"number1 = number1 + 1"
--number2;
// 相当于"number2 = number2 - 1"
cout << "number1 递增后 " << number1 << endl;
cout << "number2 递减后 " << number2 << endl;
quotient = number1 / number2;
cout << "新余数(模) " << quotient << endl;
return 0;
}
While循环语句
While循环语法如下:
初始化语句;
while (test) {
loop-body;
}
下一个语句;
While循环语句例子如下:
#include <iostream>
int main(int argc, char **argv) {
int count = 0;
int i = 0;
while (i < 100) {
count += i;
i++;
}
std::cout << "1 + 2 + 3 + ... + 99 = " << count << std::endl;
return 0;
}
条件语句
条件语句使用比较运算符,包括:
操作符 | 解释 | 例子 |
== | 等于 | x == y |
!= | 不等于 | x != y |
> | 大于 | x > y |
>= | 大于或等于 | x >= y |
< | 小于 | x < y |
<= | 小于或等于 | x <= y |
另外使用到的逻辑操作符如下:
操作符 | 解释 | 例子 |
&& | 逻辑与 | (x >= 1) && (x <= 100) |
|| | 逻辑或 | (x < 1) || (x > 100) |
! | 逻辑非 | !(x == 8) |
条件语句的语法如下:
// if-then
if ( test ) {
true-body;
}
// if-then-else
if ( test ) {
true-body;
} else {
false-body;
}
下面是条件语句的语法:
/*
* 把奇数和偶数从1加到一个上界
*/
#include <iostream>
using namespace std;
int main() {
int sumOdd = 0; // 初始化为0
int sumEven = 0; // 初始化为0
int upperbound; // 从1到这个上界求和
// 输入上界
cout << "Enter the upperbound: ";
cin >> upperbound;
// 使用循环重复地加1,2,3,…,直到上界
int number = 1;
while (number <= upperbound) {
if (number % 2 == 0) { // 偶数
sumEven = sumEven + number;
} else { // 奇数
sumOdd = sumOdd + number;
}
++number; // 递增
}
// 打印
cout << "The sum of odd numbers is " << sumOdd << endl;
cout << "The sum of even numbers is " << sumEven << endl;
cout << "The difference is " << (sumOdd - sumEven) << endl;
return 0;
}
下面是使用逻辑操作符的例子:
// 如果x在0到100(包含100)之间返回true
(x >= 0) && (x <= 100) // AND (&&)
// 如果x在0和100(包括)之外则返回true
(x < 0) || (x > 100) // OR (||)
!((x >= 0) && (x <= 100)) // NOT (!), AND (&&)
((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)
总结
好吧,内容不算多。可能是我之前写过很多语言关于编程基础的文章,特别是关于变量、语句、循环、条件、函数、操作符等等,大概是写了很多了,本文有点不耐烦,所以提前结束了。