深入浅出:C++初学者入门教程指南

2021年3月8日16:45:31 发表评论 915 次浏览

本文概述

前言

C++入门指南

本系列教程试图详细解读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++编译过程简介

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)

总结

好吧,内容不算多。可能是我之前写过很多语言关于编程基础的文章,特别是关于变量、语句、循环、条件、函数、操作符等等,大概是写了很多了,本文有点不耐烦,所以提前结束了。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: