C++ Primer Plus 第2章:开始学习C++

2.1 进入C++

2.1.1 第一个C++程序

复制代码
// myfirst.cpp -- 第一个C++程序
#include <iostream>                 // 预处理器编译指令
​
int main()                          // 函数头
{
    using namespace std;            // 使用std命名空间
    cout << "Come up and C++ me some time." << endl;
    cout << "You won't regret it!" << endl;
    return 0;                       // 结束main()函数
}

输出:

复制代码
Come up and C++ me some time.
You won't regret it!

2.1.2 程序结构解析

组成部分 说明
// 注释 单行注释,编译器忽略
#include <iostream> 预处理器指令,包含头文件
int main() 主函数,程序入口
{ } 函数体定界符
using namespace std; 使用标准命名空间
return 0; 返回值,0表示正常结束

2.1.3 注释

C++ 支持两种注释方式:

复制代码
// 这是单行注释(C++风格)
​
/* 这是
   多行注释
   (C风格)*/
​
#include <iostream>
int main()
{
    // 单行注释示例
    /* 多行注释示例
       可以跨越多行 */
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

⚠️ 注意 :C++风格的 // 注释更常用,C风格 /* */ 注释不能嵌套。


2.1.4 预处理器与头文件

复制代码
#include <iostream>   // C++标准头文件(无.h后缀)
#include <cmath>      // C数学库的C++版本
#include "myfile.h"   // 用户自定义头文件(用引号)
  • < > 用于标准库头文件

  • " " 用于自定义头文件

  • C++头文件没有 .h 后缀 (如 iostream 而非 iostream.h


2.1.5 main() 函数

复制代码
// main函数的标准形式
int main()
{
    // 函数体
    return 0;   // 向操作系统返回0,表示程序正常结束
}
  • main() 是程序的入口点 ,每个C++程序必须有且只有一个 main()

  • 返回类型 int 表示向操作系统返回一个整数

  • return 0 表示程序正常退出,非0值通常表示异常


2.2 C++语句

2.2.1 声明语句与变量

复制代码
#include <iostream>
int main()
{
    using namespace std;
​
    int carrots;            // 声明一个整型变量
    carrots = 25;           // 赋值语句
    cout << carrots << endl;
​
    int apples = 10;        // 声明并初始化(推荐写法)
    cout << apples << endl;
​
    return 0;
}

变量声明规则:

  • 必须先声明,再使用

  • 变量名区分大小写(Carrotscarrots

  • 不能以数字开头

  • 不能使用C++关键字


2.2.2 赋值语句

复制代码
#include <iostream>
int main()
{
    using namespace std;
​
    int steinway;
    int baldwin;
    int yamaha;
​
    yamaha = steinway = baldwin = 88;   // 连续赋值(从右向左)
    cout << "yamaha = " << yamaha << endl;
    cout << "baldwin = " << baldwin << endl;
    cout << "steinway = " << steinway << endl;
​
    return 0;
}

输出:

复制代码
yamaha = 88
baldwin = 88
steinway = 88

2.2.3 cout 输出语句

复制代码
#include <iostream>
int main()
{
    using namespace std;

    int number = 42;
    double pi = 3.14159;

    // 输出字符串
    cout << "Hello, C++!" << endl;

    // 输出变量
    cout << "number = " << number << endl;

    // 链式输出(<<运算符可以连续使用)
    cout << "pi = " << pi << "\n";

    // endl vs \n
    cout << "使用endl会刷新缓冲区" << endl;
    cout << "使用\\n只换行不刷新" << "\n";

    return 0;
}

💡 endl vs \nendl 输出换行符并刷新输出缓冲区\n 只输出换行符,效率更高。


2.3 其他C++语句

2.3.1 cin 输入语句

复制代码
// getinfo.cpp -- 使用cin读取用户输入
#include <iostream>
int main()
{
    using namespace std;

    int carrots;
    cout << "How many carrots do you have?" << endl;
    cin >> carrots;     // 从键盘读取整数
    cout << "Here are two more. ";
    cout << "Now you have " << carrots + 2 << " carrots." << endl;

    return 0;
}

运行示例:

复制代码
How many carrots do you have?
12
Here are two more. Now you have 14 carrots.

2.3.2 cin 读取多个值

复制代码
#include <iostream>
int main()
{
    using namespace std;

    int age;
    double height;

    cout << "请输入年龄和身高(用空格分隔):" << endl;
    cin >> age >> height;   // 链式读取

    cout << "年龄:" << age << endl;
    cout << "身高:" << height << " 米" << endl;

    return 0;
}

2.3.3 类简介

复制代码
// 类是C++的核心概念
// cout 和 cin 都是类的对象

// cout 是 ostream 类的对象
// cin  是 istream 类的对象
// 它们都定义在 <iostream> 头文件中

#include <iostream>
int main()
{
    using namespace std;

    // cout 对象使用 << 运算符(插入运算符)
    cout << "这是cout对象的使用示例" << endl;

    // cin 对象使用 >> 运算符(提取运算符)
    int x;
    cin >> x;

    return 0;
}

2.4 函数

2.4.1 使用有返回值的函数

复制代码
// sqrt_demo.cpp -- 使用sqrt()函数
#include <iostream>
#include <cmath>        // 包含数学函数库

int main()
{
    using namespace std;

    double area;
    cout << "请输入正方形的面积:";
    cin >> area;

    double side = sqrt(area);   // 调用sqrt()函数求平方根
    cout << "边长为:" << side << endl;

    // 函数可以嵌套使用
    cout << "4的平方根是:" << sqrt(4.0) << endl;
    cout << "2的平方根是:" << sqrt(2.0) << endl;

    return 0;
}

运行示例:

复制代码
请输入正方形的面积:25
边长为:5
4的平方根是:2
2的平方根是:1.41421

2.4.2 自定义函数

复制代码
// ourfunc.cpp -- 定义并使用自定义函数
#include <iostream>

// 函数原型(声明)
void simon(int n);          // 无返回值函数
int sum(int a, int b);      // 有返回值函数

int main()
{
    using namespace std;

    simon(3);               // 调用自定义函数
    cout << "Pick an integer: ";
    int count;
    cin >> count;
    simon(count);

    cout << "1 + 2 = " << sum(1, 2) << endl;

    return 0;
}

// 函数定义
void simon(int n)
{
    using namespace std;
    cout << "Simon says touch your toes " << n << " times." << endl;
}

int sum(int a, int b)
{
    return a + b;
}

输出:

复制代码
Simon says touch your toes 3 times.
Pick an integer: 5
Simon says touch your toes 5 times.
1 + 2 = 3

2.4.3 函数原型

复制代码
#include <iostream>

// ✅ 函数原型:在main()之前声明函数
double cube(double x);      // 告诉编译器函数的参数类型和返回类型

int main()
{
    using namespace std;
    double side = 3.0;
    double volume = cube(side);
    cout << "边长为 " << side << " 的正方体体积为:" << volume << endl;
    return 0;
}

// 函数定义(可以在main()之后)
double cube(double x)
{
    return x * x * x;
}

💡 函数原型的作用

  • 告知编译器函数的返回类型

  • 告知编译器函数的参数数量和类型

  • 使编译器能够检查函数调用是否正确


2.4.4 void 函数(无返回值)

复制代码
#include <iostream>

void printLine(char ch, int width);   // 函数原型

int main()
{
    printLine('*', 20);
    std::cout << "  Hello, C++!  " << std::endl;
    printLine('-', 20);
    return 0;
}

void printLine(char ch, int width)
{
    for (int i = 0; i < width; i++)
        std::cout << ch;
    std::cout << std::endl;
}

输出:

复制代码
********************
  Hello, C++!  
--------------------

2.5 命名空间

2.5.1 using namespace std

复制代码
#include <iostream>

// 方式一:使用整个命名空间(最常见,但不推荐在大型项目中使用)
using namespace std;

int main()
{
    cout << "方式一:using namespace std" << endl;
    return 0;
}

2.5.2 using 声明(推荐)

复制代码
#include <iostream>

int main()
{
    // 方式二:只引入需要的名称(推荐)
    using std::cout;
    using std::endl;
    using std::cin;

    int x;
    cout << "请输入一个数字:";
    cin >> x;
    cout << "你输入了:" << x << endl;

    return 0;
}

2.5.3 使用作用域解析运算符(最规范)

复制代码
#include <iostream>

int main()
{
    // 方式三:每次使用时加 std:: 前缀(最规范,大型项目推荐)
    std::cout << "方式三:使用 std:: 前缀" << std::endl;
    std::cout << "这是最明确的写法" << std::endl;
    return 0;
}
方式 写法 适用场景
全局引入 using namespace std; 学习、小型程序
局部声明 using std::cout; 中型程序
作用域解析 std::cout 大型项目、库开发

2.6 综合示例

复制代码
// complete_demo.cpp -- 第2章综合示例
#include <iostream>
#include <cmath>

// 函数原型
double circleArea(double radius);
void printResult(double r, double area);

int main()
{
    using namespace std;

    cout << "===== 圆面积计算器 =====" << endl;
    cout << "请输入圆的半径:";

    double radius;
    cin >> radius;

    double area = circleArea(radius);
    printResult(radius, area);

    return 0;
}

double circleArea(double radius)
{
    const double PI = 3.14159265358979;
    return PI * radius * radius;
}

void printResult(double r, double area)
{
    using namespace std;
    cout << "半径为 " << r << " 的圆,面积为:" << area << endl;
}

运行示例:

复制代码
===== 圆面积计算器 =====
请输入圆的半径:5
半径为 5 的圆,面积为:78.5398

📝 第2章知识点总结

知识点 核心要点
程序结构 #includemain() → 语句 → return 0
注释 // 单行,/* */ 多行
头文件 C++标准头文件无 .h 后缀
cout 使用 << 运算符输出,endl 换行并刷新缓冲区
cin 使用 >> 运算符输入
变量 先声明后使用,声明时最好初始化
函数 原型声明 → 调用 → 定义,void 表示无返回值
命名空间 std:: 前缀或 using namespace std;
return main() 返回0表示正常结束
相关推荐
鹏晨互联15 小时前
《Kotlin高阶函数完全指南:从入门到精通的15个核心函数》
android·开发语言·kotlin
c2385615 小时前
MySrting的模拟实现
开发语言·c++·算法
Rabitebla15 小时前
C++ 继承详解(下):默认成员函数、虚继承底层与设计取舍
c语言·开发语言·数据结构·c++·算法·leetcode
枫叶丹415 小时前
【HarmonyOS 6.0】Live View Kit深度解析:实况胶囊尾部图标的设计哲学与实现全流程
开发语言·华为·harmonyos
吃好睡好便好21 小时前
提取矩阵某一行或某一列元素
开发语言·人工智能·线性代数·算法·matlab·矩阵
deepin_sir1 天前
10 - 函数
开发语言·python
z落落1 天前
C#String字符串
开发语言·c#·php
wljy11 天前
二、进制状态转换
linux·运维·服务器·c语言·c++
猫头虎-前端技术1 天前
JS 作用域与闭包:从变量提升到闭包陷阱的超详细解析
开发语言·javascript·云计算·bootstrap·ecmascript·openstack·perl