当前位置: 首页 > article >正文

C++封装、继承和多态

C++中的封装、继承和多态是面向对象编程的三大特性,下面我将分别用简单的例子来解释这些概念。

1. 封装 

封装指的是将数据成员和成员函数封装在一起,形成一个类。封装有助于隐藏实现细节,并且保护数据不受外部影响。在C++中,可以通过定义类并将成员声明为private、protected或public来实现封装。

示例代码:

#include <iostream>

 

class BankAccount

{

private:

    double balance; // 数据成员

public:

    BankAccount(double initialBalance) : balance(initialBalance) {} // 构造函数

 

    void deposit(double amount); // 存款

    void withdraw(double amount); // 取款

    double getBalance() const; // 获取余额

};

 

void BankAccount::deposit(double amount)

{

    if (amount > 0)

    {

        balance += amount;

    }

}

 

void BankAccount::withdraw(double amount)

{

    if (amount > 0 && balance >= amount)

    {

        balance -= amount;

    }

}

 

double BankAccount::getBalance() const

{

    return balance;

}

 

int main()

{

    BankAccount account(1000.0);

    account.deposit(500.0);

    account.withdraw(200.0);

    std::cout << "Current Balance: " << account.getBalance() << std::endl;

 

    return 0;

}

2. 继承

继承是指一个类可以从另一个类那里派生出来,继承了基类的所有公共属性和行为。继承支持代码重用和层次分类。

示例代码:

#include <iostream>

 

class Animal

{

public:

    virtual void speak() const = 0; // 纯虚函数

};

 

class Dog : public Animal

{ // 派生类Dog继承自Animal

public:

    void speak() const override

    { // 覆盖基类的虚函数

        std::cout << "Woof!" << std::endl;

    }

};

 

class Cat : public Animal

{ // 派生类Cat继承自Animal

public:

    void speak() const override

    {

        std::cout << "Meow!" << std::endl;

    }

};

 

int main()

{

    Dog dog;

    Cat cat;

 

    dog.speak();

    cat.speak();

 

    return 0;

}

3. 多态

多态意味着一个类的行为可以通过继承和覆写(override)来改变。在C++中,多态通常是通过虚函数实现的。虚函数允许派生类重写基类的方法,从而实现不同的行为。

示例代码:

在上面的继承示例中,我们已经看到了多态的例子。speak()是一个虚函数,在Dog和Cat类中分别有不同的实现。当我们通过指向`Animal`类型的指针或引用调用speak()时,实际调用哪个版本取决于对象的实际类型(动态绑定)。

#include <iostream>

class Animal

{

public:

    virtual ~Animal() {} // 虚析构函数

    virtual void speak() const = 0; // 纯虚函数

};

 

class Dog : public Animal

{

public:

    void speak() const override

{

        std::cout << "Woof!" << std::endl;

    }

};

 

class Cat : public Animal

{

public:

    void speak() const override

{

        std::cout << "Meow!" << std::endl;

    }

};

 

int main()

{

    Animal* myPet = new Dog(); // 动态类型为Dog

    myPet->speak(); // 输出 "Woof!"

    delete myPet; // 因为Animal有虚析构函数,所以这里会调用Dog的析构函数

    myPet = new Cat(); // 动态类型为Cat

    myPet->speak(); // 输出 "Meow!"

    delete myPet; // 同样会调用Cat的析构函数

    return 0;

}

在这个例子中,我们通过Animal*类型的指针来调用speak()方法,实际的行为取决于myPet指向的对象类型。这就是多态性的体现。


http://www.kler.cn/a/292236.html

相关文章:

  • Spring Boot框架:电商系统的技术革新
  • 使用Redis的一些经验总结
  • 自动驾驶仿真:软件在环(SIL)测试详解(精简版入门)
  • Easyui ComboBox 数据加载完成之后过滤数据
  • 【知识科普】微内核架构与宏内核架构
  • 基于Spring Boot的在线性格测试系统设计与实现(源码+定制+开发)智能性格测试与用户个性分析平台、在线心理测评系统的开发、性格测试与个性数据管理系统
  • wmv怎么转换成视频mp4?简单的几种视频格式转换方法
  • 1024页 | 20万字详细讲解大数据系统平台设计
  • IP学习-Sixday
  • HTML5好看的花店商城源码3
  • Spark2.x 入门:逻辑回归分类器
  • JavaScript常见反调试手段
  • 第10讲 后端2
  • Elastic Stack-ES集群常用的API
  • 【重学 MySQL】十二、SQL 语言的规则与规范
  • 认识爬虫技术
  • Rust多线程编程概述
  • 爬虫IP池推荐
  • 宠物空气净化器是智商税吗?希喂、IAM、范罗士哪款除毛效果更好?
  • FLTRNN:基于大型语言模型的机器人复杂长时任务规划
  • 深度学习基础--监督学习
  • 如何编写测试用例?
  • C++入门项目:Linux下C++轻量级Web服务器 跑通|运行|测试(小白进)
  • 【FreeRTOS】内存管理
  • bug“医典”
  • Prometheus与Grafana入门:从安装到基础监控的完整指南