
C++类
类
在C++中,类(Class) 是一种用户定义的数据类型,它将数据和操作这些数据的函数封装在一起,实现了面向对象编程的核心思想:封装、继承、多态。
1. 类的基本定义
类是对对象的一种抽象描述。它定义了对象的属性(成员变量)和行为(成员函数),是一种数据和函数的集合。
语法:
class ClassName {
private: // 私有成员,默认访问权限
// 数据成员(属性)
public: // 公有成员
// 构造函数
// 成员函数(方法)
};
示例:
#include <iostream>
using namespace std;
class Person {
private:
string name; // 私有成员变量
int age;
public:
// 构造函数:初始化对象
Person(string n, int a) : name(n), age(a) {}
// 成员函数:操作类的属性
void display() {
cout << "Name: " << name << ", Age: " << age << endl;
}
};
int main() {
// 创建对象
Person p1("Alice", 25);
p1.display(); // 输出:Name: Alice, Age: 25
return 0;
}
2. 类的组成
(1)成员变量
成员变量是类中的属性,用于存储对象的状态。
- 访问权限:成员变量可以是
private
(私有)、protected
(受保护)或public
(公有)。 - 默认访问权限:如果未指定,默认是
private
。
(2)成员函数
成员函数是类中的行为,用于操作成员变量或提供功能。
- 函数定义可以在类内部(隐式内联)或类外部。
示例:
class Example {
private:
int value;
public:
void setValue(int v) { // 定义在类内
value = v;
}
int getValue(); // 声明在类内,定义在类外
};
int Example::getValue() { // 类外定义
return value;
}
3. 构造函数和析构函数
(1)构造函数
- 构造函数是一个与类同名的特殊函数,用于在创建对象时初始化成员变量。
- 没有返回值。
- 可以有参数(重载构造函数),也可以没有参数(默认构造函数)。
- 支持初始化列表。
示例:
class MyClass {
private:
int x;
public:
MyClass(int value) : x(value) { // 使用初始化列表
cout << "Constructor called, x = " << x << endl;
}
};
(2)析构函数
- 析构函数是一个特殊的函数,用于在对象销毁时释放资源。
- 以
~
开头,类名后不带参数。 - 系统会自动调用析构函数。
示例:
class MyClass {
public:
~MyClass() {
cout << "Destructor called" << endl;
}
};
4. 访问权限
C++中的访问权限用于控制成员变量和函数的可见性:
权限 | 类内访问 | 派生类访问 | 外部访问 |
---|---|---|---|
private |
✔ | ✘ | ✘ |
protected |
✔ | ✔ | ✘ |
public |
✔ | ✔ | ✔ |
5. 类的头文件和源文件分离
在C++中,通常将类的声明和实现分离,以提高代码的可维护性和模块化。
- 头文件(
.h
):存放类的声明和接口。 - 源文件(
.cpp
):存放类的具体实现。
示例:
Person.h
#ifndef PERSON_H
#define PERSON_H
#include <string>
using namespace std;
class Person {
private:
string name;
int age;
public:
Person(string n, int a);
void display();
};
#endif
Person.cpp
#include "Person.h"
#include <iostream>
using namespace std;
// 构造函数的实现
Person::Person(string n, int a) : name(n), age(a) {}
// 成员函数的实现
void Person::display() {
cout << "Name: " << name << ", Age: " << age << endl;
}
main.cpp
#include "Person.h"
int main() {
Person p("Bob", 30);
p.display();
return 0;
}
6. 面向对象的特性
(1)封装
将数据和操作数据的函数封装在一个类中,通过访问权限保护数据。
- 通过
private
隐藏细节,通过public
暴露接口。
(2)继承
一个类可以从另一个类中继承属性和方法,支持代码复用。
- 基类(父类):被继承的类。
- 派生类(子类):继承基类的类。
示例:
class Animal {
public:
void eat() { cout << "I can eat." << endl; }
};
class Dog : public Animal { // Dog继承自Animal
public:
void bark() { cout << "I can bark." << endl; }
};
(3)多态
允许通过基类指针或引用调用派生类的行为。
-
实现方式:虚函数。
-
示例:
class Animal { public: virtual void sound() { cout << "Animal sound" << endl; } }; class Dog : public Animal { public: void sound() override { cout << "Dog barks" << endl; } }; int main() { Animal* a = new Dog(); a->sound(); // 输出:Dog barks delete a; return 0; }
7. 类的特点总结
- 封装:通过类组织数据和功能。
- 继承:支持代码复用和扩展。
- 多态:实现灵活的接口调用。
- 分离声明与实现:通过头文件和源文件组织代码。
类是C++实现复杂系统的基础工具,通过类和对象,开发者可以用更自然的方式模拟现实世界的事物和行为。
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果