白骑士的C++教学进阶篇 2.2 面向对象编程(OOP)

19 篇文章 0 订阅

系列目录

上一篇:白骑士的C++教学进阶篇 2.1 指针与引用

        面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,通过将数据和操作数据的方法封装在对象中来实现代码的重用性、可扩展性和可维护性。C++作为一种面向对象的编程语言,提供了丰富的特性来支持OOP。本篇博客将详细介绍类与对象、构造函数与析构函数、继承与多态、抽象类与接口。

类与对象

        类是面向对象编程的核心概念,它定义了一组对象具有的属性和行为。对象是类的实例,通过类来创建对象。类将数据(属性)和方法(行为)封装在一起,提供了对现实世界事物的模拟。

类的定义

        在C++中,使用‘class‘关键字定义类。例如,定义一个表示人的类:

class Person {
public:
    // 属性
    std::string name;

    int age;

    // 方法
    void introduce() {

        std::cout << "Hello, my name is " << name << " and I am " << age << " years old." << std::endl;
    }
};

        在这个例子中,‘Person‘ 类包含两个属性 ‘name‘ 和 ‘age‘,以及一个方法 ‘introduce‘。

对象的创建与使用

        通过类来创建对象,并访问对象的属性和方法,例如:

int main() {
    // 创建对象
    Person person1;
    person1.name = "Alice";
    person1.age = 30;

    // 调用方法
    person1.introduce();

    return 0;
}

        在上面的代码中,我们创建了一个 ‘Person‘ 对象 ‘person1‘,并设置了它的属性,最后调用了 ‘introduce‘ 方法。

构造函数与析构函数

        构造函数和析构函数是类中的特殊成员函数,分别在对象创建和销毁时自动调用。它们用于初始化和清理对象。

构造函数

        构造函数用于初始化对象的属性。它的名称与类名相同,没有返回类型。例如,在 ‘Person‘ 类中添加一个构造函数:

class Person {
public:
    std::string name;

    int age;

    // 构造函数
    Person(std::string n, int a) {
        name = n;
        age = a;
    }

    void introduce() {
        std::cout << "Hello, my name is " << name << " and I am " << age << " years old." << std::endl;
    }
};

        使用构造函数创建对象,代码如下:

int main() {
    Person person1("Alice", 30);
    person1.introduce();

    return 0;
}

析构函数

        析构函数用于清理对象,它的名称与类名相同,但前面加一个波浪号 ‘~‘ ,没有参数和返回类型。例如,在 ‘Person‘ 类中添加一个析构函数:

class Person {
public:
    std::string name;

    int age;

    Person(std::string n, int a) : name(n), age(a) {}

    ~Person() {
        std::cout << name << " is being destroyed." << std::endl;
    }

    void introduce() {
        std::cout << "Hello, my name is " << name << " and I am " << age << " years old." << std::endl;
    }
};

        当对象超出作用域时,析构函数会自动调用,代码如下:

int main() {
    Person person1("Alice", 30);
    person1.introduce();

    return 0;
}

继承与多态

        继承和多态是OOP的两个重要特性,继承用于创建类的层次结构,实现代码的重用;多态用于动态绑定,允许不同的对象以相同的方式被处理。

继承

        继承通过从已有类派生出新类来实现,派生类继承基类的属性和方法。使用‘:‘符号表示继承关系。例如,定义一个表示学生的类,继承自 ‘Person‘ 类:

class Student : public Person {
public:
    int studentID;

    Student(std::string n, int a, int id) : Person(n, a), studentID(id) {}

    void introduce() {
        std::cout << "Hello, my name is " << name << ", I am " << age << " years old, and my student ID is " << studentID << "." << std::endl;
    }
};

        在上面的代码中,‘Student‘ 类继承了 ‘Person‘ 类的属性和方法,并添加了新的属性 ‘studentID‘。

多态

        多态允许使用基类指针或引用来调用派生类的重载方法,实现运行时的动态绑定。使用 ‘virtual‘ 关键字声明虚函数。例如,在 ‘Person‘ 类中声明虚函数 ‘introduce‘:

class Person {
public:
    std::string name;

    int age;

    Person(std::string n, int a) : name(n), age(a) {}

    virtual void introduce() {
        std::cout << "Hello, my name is " << name << " and I am " << age << " years old." << std::endl;
    }
};

        在派生类‘Student‘中重载该虚函数,代码如下:

class Student : public Person {
public:
    int studentID;

    Student(std::string n, int a, int id) : Person(n, a), studentID(id) {}

    void introduce() override {
        std::cout << "Hello, my name is " << name << ", I am " << age << " years old, and my student ID is " << studentID << "." << std::endl;
    }
};

        使用基类指针或引用调用派生类方法,代码如下:

int main() {
    Person* person1 = new Student("Alice", 20, 1001);

    person1->introduce();

    delete person1;
    return 0;
}

抽象类与接口

        抽象类是不能实例化的类,用于定义接口。抽象类中至少有一个纯虚函数,使用 ‘= 0‘ 语法表示。例如,定义一个抽象类 ‘Shape‘:

class Shape {
public:
    virtual void draw() = 0; // 纯虚函数
};

        派生类必须实现所有纯虚函数。例如,定义一个表示圆形的类:

class Circle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing a circle." << std::endl;
    }
};

        使用抽象类指针调用派生类方法,代码如下:

int main() {
    Shape* shape = new Circle();
    shape->draw();

    delete shape;
    return 0;
}

        抽象类和接口(纯虚类)在C++中提供了一种定义标准接口的方法,保证派生类实现特定的行为。

总结

        面向对象编程(OOP)是C++的重要特性,通过类与对象、构造函数与析构函数、继承与多态以及抽象类与接口,程序员可以编写更灵活、可扩展和易维护的代码。理解并熟练掌握这些概念和技巧,将大大提高编程能力和效率。希望通过本篇博客的介绍,能更好地理解和应用OOP,为编写复杂和高效的C++程序打下坚实的基础。

下一篇:白骑士的C++教学进阶篇 2.3 模版​​​​​​​

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白骑士所长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值