第2课:类与对象
目标:
-
理解类(Class)与对象(Object)的概念。
-
掌握如何定义类、创建对象。
-
学会使用构造函数(Constructor)和析构函数(Destructor)。
-
理解访问权限控制(
public、private、protected)。
1. 类与对象的基本概念
-
类(Class):类是对象的蓝图或模板,定义了对象的属性和行为。例如,“汽车”类可以定义颜色、品牌等属性,以及启动、刹车等方法。
-
对象(Object):对象是类的实例。例如,一辆红色的丰田汽车是“汽车”类的一个具体对象。
2. 类的定义与对象的创建
定义类的语法:
class 类名 {
public: // 公有成员,外部可以直接访问
// 成员变量(属性)
// 成员函数(方法)
private: // 私有成员,仅类内部可访问
// 成员变量或函数
};
示例:定义一个简单的 Student 类
#include <iostream>
#include <string>
using namespace std;
class Student {
public:
// 成员变量(属性)
string name;
int age;
// 成员函数(方法)
void introduce() {
cout << "我叫" << name << ",今年" << age << "岁。" << endl;
}
};
int main() {
// 创建对象
Student stu1;
stu1.name = "张三"; // 访问公有成员变量
stu1.age = 18;
stu1.introduce(); // 调用公有成员函数
return 0;
}
输出:
我叫张三,今年18岁。
3. 构造函数(Constructor)
构造函数是一种特殊的成员函数,在对象创建时自动调用,用于初始化对象的成员变量。
-
构造函数的名称与类名相同。
-
构造函数没有返回类型(包括
void)。 -
可以重载(定义多个不同参数的构造函数)。
示例:带构造函数的 Student 类
class Student {
public:
string name;
int age;
// 默认构造函数(无参数)
Student() {
name = "未知";
age = 0;
}
// 带参数的构造函数
Student(string n, int a) {
name = n;
age = a;
}
void introduce() {
cout << "我叫" << name << ",今年" << age << "岁。" << endl;
}
};
int main() {
Student stu1; // 调用默认构造函数
Student stu2("李四", 20); // 调用带参数的构造函数
stu1.introduce(); // 输出:我叫未知,今年0岁。
stu2.introduce(); // 输出:我叫李四,今年20岁。
return 0;
}
4. 析构函数(Destructor)
析构函数在对象销毁时自动调用,通常用于释放资源(如内存、文件句柄等)。
-
析构函数的名称是
~类名。 -
没有参数和返回值。
-
一个类只能有一个析构函数。
示例:析构函数的使用
class Student {
public:
Student() {
cout << "对象被创建" << endl;
}
~Student() {
cout << "对象被销毁" << endl;
}
};
int main() {
Student stu1; // 构造函数被调用
return 0;
} // stu1 超出作用域,析构函数被调用
输出:
对象被创建
对象被销毁
5. 访问权限控制
C++ 通过 public、private、protected 控制成员的访问权限:
-
public:公有成员,类外部可以直接访问。
-
private:私有成员,仅类内部或友元(friend)可访问。
-
protected:受保护成员,类似私有成员,但允许子类访问(后续讲继承时会详细说明)。
示例:使用 private 封装数据
class Student {
private:
string name;
int age;
public:
// 提供公有方法访问私有成员
void setName(string n) {
name = n;
}
void setAge(int a) {
if (a >= 0) { // 可加入数据校验
age = a;
}
}
void introduce() {
cout << "我叫" << name << ",今年" << age << "岁。" << endl;
}
};
int main() {
Student stu;
stu.setName("王五");
stu.setAge(22);
stu.introduce();
// stu.age = -10; // 错误!私有成员不能在类外部直接访问
return 0;
}
示例代码:
#include <iostream>
using namespace std;
class Rectangle {
private:
double width;
double height;
public:
void setWidth(double w) {
width = w;
}
void setHeight(double h) {
height = h;
}
double getArea() {
return width * height;
}
};
int main() {
Rectangle rect;
rect.setWidth(5.0);
rect.setHeight(3.0);
cout << "面积: " << rect.getArea() << endl; // 输出 15
return 0;
}
总结
-
类是对象的模板,对象是类的实例。
-
构造函数用于初始化对象,析构函数用于清理资源。
-
通过
public、private、protected控制成员访问权限,实现封装。
&spm=1001.2101.3001.5002&articleId=145646268&d=1&t=3&u=55340ede3ab540bf9d62aab0c91dcbe2)

被折叠的 条评论
为什么被折叠?



