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指向的对象类型。这就是多态性的体现。

 

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
封装继承多态是面向对象编程中的三大特性,C++也支持这三种特性。 1. 封装 封装是指将数据和对数据的操作封装在一起,形成一个类。类中的数据和方法可以设置为私有的,只有类内部可以访问,外部无法访问。这样可以保证数据的安全性和完整性。 下面是一个封装的例子: ```c++ class Person { private: string name; int age; public: void setName(string n) { name = n; } void setAge(int a) { age = a; } string getName() { return name; } int getAge() { return age; } }; ``` 2. 继承 继承是指一个类可以继承另一个类的属性和方法。被继承的类称为父类或基类,继承的类称为子类或派生类。子类可以使用父类的属性和方法,也可以重写父类的方法。 下面是一个继承的例子: ```c++ class Student : public Person { private: int id; public: void setId(int i) { id = i; } int getId() { return id; } }; ``` 3. 多态 多态是指同一种类型的对象,在不同的情况下可以有不同的表现形式。C++中实现多态有两种方式:虚函数和模板。 下面是一个虚函数的例子: ```c++ class Shape { public: virtual double getArea() { return 0; } }; class Circle : public Shape { private: double radius; public: Circle(double r) { radius = r; } double getArea() { return 3.14 * radius * radius; } }; class Rectangle : public Shape { private: double width; double height; public: Rectangle(double w, double h) { width = w; height = h; } double getArea() { return width * height; } }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编码小哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值