在上一篇 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 = # // 定义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