C++ 基本语法入门(二)

在上一篇 C++ 基本语法内容中,我们掌握了变量、运算符、流程控制等基础内容。本篇 “基本语法二” 将继续拓展核心知识点,涵盖面向对象入门、指针与引用、字符串处理等关键内容,帮助你进一步完善 C++ 基础体系。

一、面向对象基础:类与对象

C++ 作为面向对象编程语言,类与对象是其核心特性,用于实现代码的封装、继承和多态。

1. 类的定义与对象创建

类是对象的模板,定义了对象的属性和行为。

#include <iostream>
#include <string>
using namespace std;

// 定义Person类
class Person {
private:
    // 私有成员:只能在类内部访问
    string name;
    int age;
public:
    // 公有成员:可在类外部访问
    // 构造函数:创建对象时初始化
    Person(string n, int a) {
        name = n;
        age = a;
    }
    // 成员函数:实现类的行为
    void introduce() {
        cout << "我叫" << name << ",今年" << age << "岁" << endl;
    }
    // 设置私有成员的接口
    void setAge(int a) {
        if (a > 0 && a < 120) {
            age = a;
        }
    }
};

int main() {
    // 创建Person类的对象
    Person p1("张三", 20);
    p1.introduce();  // 调用成员函数
    p1.setAge(21);
    p1.introduce();
    return 0;
}

2. 核心解析

  • private:私有访问权限,成员仅能在类内部使用,保障数据安全性。
  • public:公有访问权限,成员可在类外部调用,提供对外接口。
  • 构造函数:与类名相同,无返回值,用于对象初始化。
  • 封装意义:通过将数据和操作数据的方法封装在类中,避免外部代码随意修改内部数据,同时简化外部调用方式,提高代码可维护性。

二、指针与引用

指针和引用是 C++ 中用于间接访问数据的重要工具,在内存操作和函数传参中应用广泛。

1. 指针

指针存储变量的内存地址,通过指针可以操作对应内存中的数据。

#include <iostream>
using namespace std;

int main() {
    int num = 10;
    int* p = &num;  // 定义int类型指针p,指向num的地址
    cout << "num的值:" << num << endl;
    cout << "num的地址:" << &num << endl;
    cout << "指针p存储的地址:" << p << endl;
    cout << "指针p指向的值:" << *p << endl;  // 解引用操作
    *p = 20;  // 通过指针修改num的值
    cout << "修改后num的值:" << num << endl;
    return 0;
}

2. 引用

引用是变量的别名,对引用的操作等同于对原变量的操作。

#include <iostream>
using namespace std;

int main() {
    int a = 5;
    int& ref = a;  // 定义a的引用ref
    cout << "a的值:" << a << endl;
    cout << "ref的值:" << ref << endl;
    ref = 10;  // 修改引用,原变量a的值也会改变
    cout << "修改后a的值:" << a << endl;
    return 0;
}

3. 关键知识点

  • 指针定义格式:数据类型* 指针变量名
  • &:取地址运算符,获取变量的内存地址。
  • *:解引用运算符,通过指针访问对应内存的数据。
  • 引用注意事项:必须在定义时初始化,一旦绑定某个变量,不能再绑定其他变量;类型必须与原变量一致。

三、字符串处理

C++ 中字符串处理有两种方式:C 风格字符串和 C++ 标准库string类,后者更简洁易用。

1. C 风格字符串

以字符数组形式存储,以 ‘\0’ 作为结束标志。

#include <iostream>
#include <cstring>  // 包含字符串处理函数
using namespace std;

int main() {
    char str1[] = "Hello";
    char str2[20];
    // 字符串复制
    strcpy(str2, str1);
    cout << "str2:" << str2 << endl;
    // 字符串拼接
    strcat(str2, " World");
    cout << "拼接后str2:" << str2 << endl;
    // 获取字符串长度
    cout << "str2长度:" << strlen(str2) << endl;
    return 0;
}

2. string 类(推荐使用)

C++ 标准库提供的字符串类,支持多种便捷的字符串操作。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s1 = "Hello";
    string s2 = " World";
    // 字符串拼接
    string s3 = s1 + s2;
    cout << "s3:" << s3 << endl;
    // 获取长度
    cout << "s3长度:" << s3.size() << endl;
    // 字符串比较
    if (s1 == "Hello") {
        cout << "s1等于'Hello'" << endl;
    }
    // 截取子串(从索引2开始,截取3个字符)
    string sub = s3.substr(2, 3);
    cout << "子串:" << sub << endl;
    return 0;
}


3. string 类优势

无需手动管理内存,提供了丰富的成员函数,支持直接使用运算符进行拼接、比较等操作。


四、函数进阶:重载与默认参数

1. 函数重载

在同一作用域内,允许定义多个函数名相同但参数列表不同(参数类型、个数或顺序不同)的函数。

#include <iostream>
using namespace std;

// 加法函数重载
int add(int a, int b) {
    return a + b;
}

double add(double a, double b) {
    return a + b;
}

int add(int a, int b, int c) {
    return a + b + c;
}

int main() {
    cout << add(1, 2) << endl;         // 调用int add(int, int)
    cout << add(1.5, 2.5) << endl;     // 调用double add(double, double)
    cout << add(1, 2, 3) << endl;      // 调用int add(int, int, int)
    return 0;
}


注意:函数返回值类型不同不能作为函数重载的依据。

2. 函数默认参数

在函数声明时,可以为参数指定默认值,调用函数时若未传递该参数,则使用默认值。

#include <iostream>
using namespace std;

// 带默认参数的函数
int multiply(int a, int b = 2) {
    return a * b;
}

int main() {
    cout << multiply(3) << endl;    // 未传第二个参数,使用默认值2,结果6
    cout << multiply(3, 4) << endl; // 传递第二个参数4,结果12
    return 0;
}


规则:默认参数必须从右往左连续指定,不能跳过中间参数设置默认值。

THE END
喜欢就支持一下吧
赞赏 分享