为了账号安全,请及时绑定邮箱和手机立即绑定

C++学习:从入门到初级应用

标签:
C++
概述

本文全面介绍了C++学习的基础知识,包括语言的历史与发展、开发环境的搭建以及基本语法的讲解。文章还详细说明了C++中的数据类型、变量、控制结构、函数与参数传递,以及面向对象编程的基本概念。通过丰富的代码示例,读者可以系统地掌握C++学习的入门知识。

C++基础知识

了解C++的历史与发展

C++语言是由Bjarne Stroustrup在20世纪70年代末期、80年代初期开发的。当时,Stroustrup正在贝尔实验室工作,在C语言的基础上扩展了新的编程特性,最终形成了C++。C++最初被设计为一种“C with Classes”的语言,目的是在C语言的基础上增加面向对象的功能。

C++语言的第一次发布是在1985年,随后在1998年发布了第一个标准版本(C++98),该版本引入了STL(标准模板库),极大增强了C++的实用性。此后,C++标准委员会继续对语言进行改进和完善,发布了多个版本,包括C++11(2011年)、C++14(2014年)、C++17(2017年)和C++20(2020年)。每个新版本都引入了新的功能和改进,使得C++语言更加丰富和强大。

C++的开发环境搭建

要开始编写C++程序,首先需要搭建开发环境。以下步骤指导你如何设置一个基本的开发环境:

  1. 安装编译器

    • 最常用的C++编译器是GCC(GNU Compiler Collection)。您可以从官方网站下载并安装GCC。
    • 另一个常用的选择是Clang,它是一个基于LLVM的C++编译器。
  2. 集成开发环境(IDE)

    • 安装一个IDE,比如Code::Blocks、Visual Studio Code或JetBrains的CLion。这些IDE都支持C++开发,并提供了代码编辑、调试、构建等工具。
  3. 文本编辑器

    • 如果你更倾向于使用文本编辑器,可以安装像Sublime Text、VS Code或Emacs这样的编辑器。安装完成后,你还需要安装相应的C++插件或扩展,以支持C++开发。
  4. 设置环境变量

    • 如果你是手动安装编译器,确保将编译器的路径添加到系统环境变量中。这取决于你使用的操作系统,通常需要在命令行窗口中运行一些命令来配置环境变量。
  5. 构建和运行程序
    • 在IDE中创建一个新的C++项目或配置一个普通文件夹作为工作目录。
    • 编写并保存你的C++源代码文件(例如,文件名为main.cpp)。
    • 使用IDE或命令行工具编译和运行程序。例如,使用GCC编译器,你可以使用以下命令:
      g++ main.cpp -o main
      ./main
    • 如果你使用IDE,通常只需点击“编译”和“运行”按钮即可。

基本语法介绍

C++的基本语法与C语言有很多相似之处。以下是一些基本的语法概念:

  • 注释

    • 单行注释:// 这是单行注释
    • 多行注释:/* 这是多行注释 */
  • 预处理指令

    • 使用#include预处理指令来包含头文件,例如#include <iostream>
    • 使用#define来定义宏。
    • 使用#pragma来控制编译器行为。
  • 主函数

    • 每个C++程序都必须包含一个main函数,作为程序的入口点。
    • main函数的两种常见形式:
    • 不带返回值(int main(void)
    • 带返回值(int main(int argc, char *argv[])
  • 变量声明与初始化

    • 变量声明的一般格式为:type variable_name;
    • 初始化的基本格式为:type variable_name = value;
  • 输入输出

    • 使用<iostream>库中的cincout进行输入输出。
    • cout << "Hello, World!\n";
    • int x; cout << "The value of x is: " << x << endl;
  • 基本程序结构
    • #include <iostream>:包含标准输入输出流库。
    • using namespace std;:使用标准命名空间。
    • int main():主函数,程序的入口点。
    • 函数体:程序的具体逻辑。
    • return 0;:返回0表示程序成功退出。

第一个C++程序

下面是一个简单的C++程序,用于输出"Hello, World!":

#include <iostream>

using namespace std;

int main() {
    cout << "Hello, World!\n";
    return 0;
}

该程序包括以下部分:

  • #include <iostream>:包含输入输出流库。
  • using namespace std;:使用标准命名空间。
  • int main():主函数。
  • cout << "Hello, World!\n";:输出字符串。
  • return 0;:程序执行成功后返回0。
数据类型与变量

常见的数据类型

C++中常见的数据类型分为两大类:基本数据类型和复合数据类型。

基本数据类型

  1. 整型(Integer)

    • int:整数类型,通常占用4个字节。
    • short:短整型,通常占用2个字节。
    • long:长整型,通常占用4个字节。
    • long long:更长的整型,通常占用8个字节。
  2. 浮点型(Floating Point)

    • float:单精度浮点型,通常占用4个字节。
    • double:双精度浮点型,通常占用8个字节。
    • long double:扩展精度浮点型,通常占用8或16个字节。
  3. 字符型(Character)

    • char:字符类型,通常占用1个字节。
    • wchar_t:宽字符类型,通常占用2或4个字节。
  4. 布尔型(Boolean)
    • bool:布尔类型,通常占用1个字节。

示例代码

#include <iostream>

int main() {
    int a = 10;
    short b = 20;
    long c = 30;
    long long d = 40;
    float f = 1.5;
    double g = 2.5;
    long double h = 3.5;
    char ch = 'A';
    wchar_t wc = L'B';
    bool flag = true;

    std::cout << "整型:a = " << a << ", b = " << b << ", c = " << c << ", d = " << d << "\n";
    std::cout << "浮点型:f = " << f << ", g = " << g << ", h = " << h << "\n";
    std::cout << "字符型:ch = " << ch << ", wc = " << wc << "\n";
    std::cout << "布尔型:flag = " << flag << "\n";

    return 0;
}

变量的命名规则与使用

变量命名规则:

  • 字母、数字和下划线:变量名只能包含字母(小写或大写)、数字和下划线。
  • 不能以数字开头:变量名不能以数字开头。
  • 大小写敏感:变量名是大小写敏感的,例如myVarmyvar是两个不同的变量。
  • 不能使用保留关键字:变量名不能是C++关键字,如intifelse等。
  • 长度限制:不同工具和环境对变量名的长度限制不同,但一般建议不要超过31个字符。
  • 描述清晰:变量名应尽量描述其用途,便于理解。

示例代码:

#include <iostream>

int main() {
    int age = 25;  // 合法变量名
    float height = 1.75;  // 合法变量名
    const int MAX_VALUE = 100;  // 合法变量名,且为常量

    // 下面是一些不合法的变量名示例
    // int 1age;   // 错误,变量名不能以数字开头
    // int int;    // 错误,int是保留关键字
    // int for;    // 错误,for是保留关键字
    // int 2name;  // 错误,变量名不能以数字开头

    std::cout << "年龄: " << age << "\n";
    std::cout << "身高: " << height << "\n";
    std::cout << "最大值: " << MAX_VALUE << "\n";

    return 0;
}

常量与符号常量

常量

常量是在程序运行过程中其值不会改变的量。在C++中,常量可以通过const关键字来声明。

符号常量

符号常量是通过#define预处理指令定义的常量。

示例代码

#include <iostream>

int main() {
    const int MAX_VALUE = 100;  // 常量,通过const关键字定义
    #define PI 3.14159265359  // 符号常量,通过#define定义

    int count = 50;
    if (count < MAX_VALUE) {
        std::cout << "count小于最大值" << std::endl;
    }

    double area = PI * 2 * 2;  // 计算圆的面积
    std::cout << "圆的面积: " << area << std::endl;

    return 0;
}
控制结构

条件语句

条件语句用于根据条件执行不同的代码块。C++中常用的条件语句有ifif-elseelse if

if语句

if语句的基本结构如下:

if (条件表达式) {
    // 条件为true时执行的代码块
}

if-else语句

if-else语句的基本结构如下:

if (条件表达式) {
    // 条件为true时执行的代码块
} else {
    // 条件为false时执行的代码块
}

else if语句

else if语句用于检查多个条件:

if (条件1) {
    // 条件1为true时执行的代码块
} else if (条件2) {
    // 条件2为true时执行的代码块
} else {
    // 所有条件为false时执行的代码块
}

示例代码

#include <iostream>

int main() {
    int score = 85;

    if (score >= 90) {
        std::cout << "成绩优秀" << std::endl;
    } else if (score >= 70) {
        std::cout << "成绩良好" << std::endl;
    } else {
        std::cout << "成绩一般" << std::endl;
    }

    return 0;
}

循环语句

循环语句用于重复执行一段代码,直到满足某个条件为止。C++中的循环语句有forwhiledo-while

for循环

for循环的基本结构如下:

for (初始化表达式; 循环条件; 循环后操作) {
    // 循环体代码
}

while循环

while循环的基本结构如下:

while (循环条件) {
    // 循环体代码
}

do-while循环

do-while循环的基本结构如下:

do {
    // 循环体代码
} while (循环条件);

示例代码

#include <iostream>

int main() {
    int i = 0;

    // 使用for循环
    std::cout << "for循环:" << std::endl;
    for (i = 0; i < 5; i++) {
        std::cout << "i = " << i << std::endl;
    }

    // 使用while循环
    std::cout << "\nwhile循环:" << std::endl;
    i = 0;
    while (i < 5) {
        std::cout << "i = " << i << std::endl;
        i++;
    }

    // 使用do-while循环
    std::cout << "\ndo-while循环:" << std::endl;
    i = 0;
    do {
        std::cout << "i = " << i << std::endl;
        i++;
    } while (i < 5);

    return 0;
}

分支结构

分支结构是条件语句的另一种形式,用于根据不同的条件执行不同的代码块。C++中的分支结构主要有switch语句。

switch语句

switch语句的基本结构如下:

switch (条件表达式) {
    case 值1:
        // 值1的代码块
        break;
    case 值2:
        // 值2的代码块
        break;
    default:
        // 默认的代码块
}

示例代码

#include <iostream>

int main() {
    int number = 2;

    switch (number) {
        case 1:
            std::cout << "数字为1" << std::endl;
            break;
        case 2:
            std::cout << "数字为2" << std::endl;
            break;
        case 3:
            std::cout << "数字为3" << std::endl;
            break;
        default:
            std::cout << "数字不在1、2、3范围内" << std::endl;
    }

    return 0;
}
函数与参数传递

函数的定义与调用

函数是可重用的代码块,用于执行特定的任务。函数的定义包括函数名、返回类型、参数列表和函数体。

函数定义的基本语法

返回类型 函数名(参数列表) {
    // 函数体
    // 可以包含一条或多条语句
    // 可以有返回值
}

函数调用

函数调用的基本语法:

函数名(实参列表);

示例代码

#include <iostream>

// 函数定义
int sum(int a, int b) {
    return a + b;
}

int main() {
    int result = sum(3, 5);  // 函数调用
    std::cout << "3 + 5 = " << result << std::endl;

    return 0;
}

参数传递

参数传递是指在调用函数时将实参传递给函数形参的过程。C++支持多种参数传递方式,包括值传递、引用传递和指针传递。

值传递

值传递是指将实参的副本传递给形参。形参在函数体内修改不会影响实参的值。

void incrementByValue(int a) {
    a++;
}

int main() {
    int x = 5;
    incrementByValue(x);  // 传递副本
    std::cout << "x = " << x << std::endl;  // 输出5
    return 0;
}

引用传递

引用传递是指将实参的引用传递给形参。形参在函数体内修改会影响实参的值。

void incrementByReference(int &a) {
    a++;
}

int main() {
    int x = 5;
    incrementByReference(x);  // 传递引用
    std::cout << "x = " << x << std::endl;  // 输出6
    return 0;
}

指针传递

指针传递是指将实参的地址传递给形参。形参在函数体内修改会影响实参的值。

void incrementByPointer(int *a) {
    (*a)++;
}

int main() {
    int x = 5;
    incrementByPointer(&x);  // 传递地址
    std::cout << "x = " << x << std::endl;  // 输出6
    return 0;
}

返回值与返回类型

函数可以返回一个值,以供调用者使用。返回值的类型由函数的返回类型指定。

无返回值函数

无返回值函数通常用于执行某些操作,如输出、修改数据等。

void printMessage() {
    std::cout << "这是一个无返回值函数" << std::endl;
}

int main() {
    printMessage();
    return 0;
}

有返回值函数

有返回值函数用于返回一个值。返回类型可以是基本数据类型、指针类型或引用类型。

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

int main() {
    int result = calculateSum(3, 5);
    std::cout << "3 + 5 = " << result << std::endl;
    return 0;
}
数组与指针

数组的定义与使用

数组是一种数据结构,用于存储一组相同类型的元素。数组的定义包括数组名、元素类型和数组长度。

定义数组

类型 名称[长度];

数组初始化

int arr[5] = {1, 2, 3, 4, 5};

访问数组元素

arr[0];
arr[1];

示例代码

#include <iostream>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};

    for (int i = 0; i < 5; i++) {
        std::cout << "arr[" << i << "] = " << arr[i] << std::endl;
    }

    return 0;
}

一维数组

一维数组是最简单的数组形式,用于存储一组相同类型的元素。

示例代码

#include <iostream>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};

    for (int i = 0; i < 5; i++) {
        std::cout << "arr[" << i << "] = " << arr[i] << std::endl;
    }

    return 0;
}

二维数组

二维数组可以看作是由一维数组构成的数组,用于存储行和列的元素。

定义二维数组

类型 名称[行数][列数];

初始化二维数组

int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

访问二维数组元素

arr[0][0];
arr[1][1];

示例代码

#include <iostream>

int main() {
    int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            std::cout << "arr[" << i << "][" << j << "] = " << arr[i][j] << std::endl;
        }
    }

    return 0;
}

指针的基本概念与使用

指针是一种变量,用于存储其他变量的地址。通过指针,可以在内存中直接访问和修改变量的值。

如何获取指针

int *p = &x;

如何通过指针访问变量

*p;

示例代码

#include <iostream>

int main() {
    int x = 5;
    int *p = &x;

    std::cout << "x = " << x << std::endl;
    std::cout << "p = " << p << std::endl;
    std::cout << "*p = " << *p << std::endl;

    *p = 10;  // 通过指针修改x的值

    std::cout << "修改后的x = " << x << std::endl;

    return 0;
}
面向对象编程基础

类与对象的概念

面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,强调通过类(Class)和对象(Object)来组织代码。类是对象的蓝图或模板,定义了对象的数据结构(成员变量)和行为(成员函数)。

类的定义

class ClassName {
    // 成员变量
    // 成员函数
};

对象的创建

ClassName obj;

示例代码

#include <iostream>

class Student {
private:
    std::string name;
    int age;

public:
    // 构造函数
    Student(std::string n, int a) : name(n), age(a) {}

    // 成员函数
    void printInfo() {
        std::cout << "Name: " << name << ", Age: " << age << std::endl;
    }
};

int main() {
    Student s1("Alice", 18);
    s1.printInfo();

    return 0;
}

成员变量与成员函数

类中的成员变量定义了对象的数据结构,成员函数定义了对象的行为。成员函数可以访问和修改成员变量。

成员变量

class ClassName {
private:
    int x;
    double y;
};

成员函数

class ClassName {
public:
    void setX(int newX) {
        x = newX;
    }

    int getX() {
        return x;
    }
};

示例代码

#include <iostream>

class Point {
private:
    int x;
    int y;

public:
    // 构造函数
    Point(int a, int b) : x(a), y(b) {}

    // 成员函数
    void setX(int newX) {
        x = newX;
    }

    int getX() {
        return x;
    }

    void setY(int newY) {
        y = newY;
    }

    int getY() {
        return y;
    }
};

int main() {
    Point p(3, 4);
    p.setX(5);
    std::cout << "X: " << p.getX() << ", Y: " << p.getY() << std::endl;

    return 0;
}

构造函数与析构函数

构造函数和析构函数是特殊的成员函数,分别在对象创建和销毁时自动调用。

构造函数

构造函数用于初始化对象。当对象创建时自动调用。

class ClassName {
public:
    ClassName(int a, int b) : x(a), y(b) {}
};

析构函数

析构函数在对象销毁时自动调用。

class ClassName {
public:
    ~ClassName() {
        // 清理资源
    }
};

示例代码


#include <iostream>

class Student {
private:
    std::string name;
    int age;

public:
    // 构造函数
    Student(std::string n, int a) : name(n), age(a) {}

    // 成员函数
    void printInfo() {
        std::cout << "Name: " << name << ", Age: " << age << std::endl;
    }

    // 析构函数
    ~Student() {
        std::cout << "销毁Student对象" << std::endl;
    }
};

int main() {
    {
        Student s1("Alice", 18);
        s1.printInfo();
    }  // s1对象销毁时会自动调用析构函数

    return 0;
}
``

以上就是C++编程的入门到初级应用的教程。通过这些基本概念和示例代码,你已经掌握了C++的基本知识,可以进一步深入学习更高级的主题了。
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消