C++类&对象

C++类与对象知识点汇总

C++ 类与对象

面向对象编程的核心概念解析 – 编程小白也能轻松理解

类的基本概念

什么是类?

类(Class)就像是一个蓝图模板,它描述了一类事物的共同特征和行为。

想象类就像”汽车设计图”:设计图描述了汽车应该有的属性(颜色、品牌、速度)和行为(启动、加速、刹车)。

类的组成

  • 成员变量 – 类的属性(如:汽车的颜色、速度)
  • 成员函数 – 类的行为(如:汽车的启动、加速)
  • 访问修饰符 – 控制谁可以访问类的成员

简单类定义示例

class Car { // 定义一个Car类
public:
  // 成员变量(属性)
  string color;
  int maxSpeed;

  // 成员函数(行为)
  void start() {
    cout << “汽车启动了!” << endl;
  }

  void accelerate() {
    cout << “汽车加速中…” << endl;
  }
};

对象与实例化

什么是对象?

对象(Object)是类的具体实例。根据”汽车设计图”可以制造出多辆真实的汽车,这些汽车就是对象。

创建对象的过程

  • 声明对象:Car myCar;
  • 初始化对象:使用构造函数(稍后介绍)
  • 使用对象:访问成员变量和调用成员函数

对象使用示例

// 创建Car类的对象
Car myCar;

// 设置对象属性
myCar.color = “红色”;
myCar.maxSpeed = 200;

// 调用对象方法
myCar.start();
myCar.accelerate();

一个类可以创建多个对象,就像可以根据同一张设计图制造多辆汽车。

访问修饰符

访问修饰符控制类成员的访问权限:

public(公开)

  • 类的外部可以直接访问
  • 通常用于成员函数

private(私有)

  • 只能在类内部访问
  • 通常用于成员变量
  • 是C++的默认访问权限

protected(保护)

  • 在类内部和子类中可以访问
  • 用于继承场景

访问控制示例

class BankAccount {
private:
  // 私有变量,外部无法直接访问
  double balance;

public:
  // 公开方法,外部可以调用
  void deposit(double amount) {
    balance += amount;
  }

  double getBalance() {
    return balance;
  }
};

构造函数与析构函数

构造函数

  • 在创建对象时自动调用
  • 用于初始化对象
  • 与类同名,没有返回类型
  • 可以有多个(重载)

析构函数

  • 在对象销毁时自动调用
  • 用于清理资源(如释放内存)
  • 类名前加~,没有参数和返回类型
  • 每个类只有一个析构函数

构造与析构示例

class Student {
private:
  string name;
  int age;

public:
  // 构造函数
  Student(string n, int a) {
    name = n;
    age = a;
    cout << “学生对象被创建” << endl;
  }

  // 析构函数
  ~Student() {
    cout << “学生对象被销毁” << endl;
  }
};

类与对象关系可视化

通过实际例子理解类和对象的关系

类:手机设计图

属性: 品牌、颜色、屏幕尺寸
行为: 打电话、发短信、拍照

对象1:我的手机

品牌: 华为
颜色: 黑色
屏幕: 6.5英寸

对象2:你的手机

品牌: 苹果
颜色: 白色
屏幕: 6.1英寸

this指针

什么是this指针?

this是一个指向当前对象的指针,在类的成员函数中使用。

想象你在一个房间里说”这个房间” – “this”就相当于指向当前房间的指针。

this指针的作用

  • 区分同名的成员变量和局部变量
  • 返回当前对象本身
  • 在成员函数中访问当前对象的成员

this指针示例

class Person {
private:
  string name;

public:
  void setName(string name) {
    // 使用this区分同名的成员变量和参数
    this->name = name;
  }

  Person* getAddress() {
    // 返回当前对象的地址
    return this;
  }
};

静态成员

静态成员变量

  • 使用static关键字声明
  • 属于类,而不是某个对象
  • 所有对象共享同一份静态成员变量
  • 需要在类外初始化

静态成员函数

  • 使用static关键字声明
  • 只能访问静态成员变量
  • 可以通过类名直接调用

静态成员示例

class Employee {
private:
  string name;
  static int count; // 静态成员变量

public:
  Employee(string n) {
    name = n;
    count++; // 创建新员工时计数增加
  }

  static int getCount() {
    return count; // 静态成员函数
  }
};

// 在类外初始化静态成员变量
int Employee::count = 0;

友元(friend)

什么是友元?

友元可以是一个函数或类,它被授权访问另一个类的私有(private)和保护(protected)成员。

就像你允许好朋友进入你的私人房间一样,友元可以访问类的私有成员。

友元的特点

  • 打破了类的封装性,应谨慎使用
  • 可以是普通函数、其他类的成员函数或整个类
  • 在类内部声明,使用friend关键字

友元函数示例

class Box {
private:
  double width;

public:
  Box(double w) { width = w; }
  
  // 声明友元函数
  friend void printWidth(Box box);
};

// 定义友元函数
void printWidth(Box box) {
  // 友元函数可以访问私有成员width
  cout << “Box宽度: “ << box.width << endl;
}

继承与多态

继承(Inheritance)

  • 允许创建新类(派生类)基于已有类(基类)
  • 派生类继承基类的属性和行为
  • 支持代码重用和层次分类

多态(Polymorphism)

  • 同一操作作用于不同对象,产生不同行为
  • 通过虚函数(virtual function)实现
  • 运行时确定调用哪个函数(动态绑定)

继承与多态简单示例

// 基类
class Animal {
public:
  virtual void speak() { // 虚函数
    cout << “动物发出声音” << endl;
  }
};

// 派生类
class Dog : public Animal {
public:
  void speak() override {
    cout << “汪汪!” << endl;
  }
};

// 另一个派生类
class Cat : public Animal {
public:
  void speak() override {
    cout << “喵喵!” << endl;
  }
};

学习总结

类(Class)是蓝图,对象(Object)是根据蓝图创建的具体实例。通过封装、继承和多态三大特性,C++的类与对象实现了面向对象编程的核心思想。掌握这些基础知识,你就迈出了成为C++开发者的重要一步!

记住:多动手实践是掌握面向对象编程的关键!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部