C++ 魔法三钥:解锁高效编程的封装、继承与多态-LMLPHP 


目录

💯前言

💯封装

1.封装概念

2.封装格式

3.封装的原理

4.封装的作用

💯继承

1.继承的概念

2.继承格式

3.继承的原理

4.继承的作用

💯多态

1.多态的概念

2.多态的格式

3.多态的原理

4.多态的作用

💯总结


💯前言


😖在 C++ 编程中,你是否曾对如何组织代码、实现代码复用以及处理不同对象的行为感到困惑?

😖你是否渴望深入理解一些核心概念,从而能够更加高效地构建复杂的程序呢?


👀如果你的答案是肯定的,那么 C++ 的三大特征 —— 封装、继承和多态,或许就是你一直在寻找的关键所在。

 


💯封装


🌠“如何保护数据的安全性和完整性,同时使代码的结构更加清晰呢

1.封装概念

2.封装格式

class MyClass {
private:
    int privateData;
public:
    void setData(int value) {
        privateData = value;
    }
    int getData() {
        return privateData;
    }
};

 关于其具体的解释请观看我之前的文章👉【C++】类与对象基础概念解析

3.封装的原理


封装的核心原理是隐藏内部实现细节,只暴露必要的接口给外部。这样可以防止外部代码直接访问和修改类的内部数据,从而保证数据的安全性和一致性。同时,通过将相关的数据和操作放在一起,使代码的逻辑结构更加清晰,易于理解和维护。

 

4.封装的作用

 📍以下是一个展示 C++ 封装特性的代码示例:📍

#include <iostream>
#include <string>

// 定义一个名为Person的类,用于表示人的信息
class Person {
private:
    // 私有成员变量,用于存储人的姓名
    std::string name;
    // 私有成员变量,用于存储人的年龄
    int age;

public:
    // 构造函数,用于初始化人的姓名和年龄
    Person(const std::string& name, int age) : name(name), age(age) {}

    // 获取姓名的函数,通过公共接口访问私有成员变量name
    std::string getName() const { return name; }

    // 获取年龄的函数,通过公共接口访问私有成员变量age
    int getAge() const { return age; }

    // 设置年龄的函数,通过公共接口修改私有成员变量age
    void setAge(int newAge) {
        if (newAge >= 0) {  // 进行简单的合法性检查
            age = newAge;
        } else {
            std::cerr << "年龄不能为负数" << std::endl;
        }
    }
};

int main() {
    // 创建一个Person对象,传入姓名和年龄
    Person person("Alice", 25);

    // 通过公共接口获取并输出人的姓名和年龄
    std::cout << "姓名: " << person.getName() << ", 年龄: " << person.getAge() << std::endl;

    // 通过公共接口修改年龄
    person.setAge(26);

    // 再次获取并输出人的年龄
    std::cout << "新年龄: " << person.getAge() << std::endl;

    return 0;
}

C++ 魔法三钥:解锁高效编程的封装、继承与多态-LMLPHP


💯继承


🌠“如何避免重复写相似代码,建立代码层次呢

1.继承的概念

2.继承格式

class BaseClass {
public:
    void baseMethod() {
        // 基类方法实现
    }
};

class DerivedClass : public BaseClass {
public:
    void derivedMethod() {
        // 派生类方法实现
    }
};

3.继承的原理

4.继承的作用

📍以下是一个展示 C++ 继承特性的代码示例:📍

#include <iostream>
#include <string>

// 基类:动物类
class Animal {
public:
    // 动物类的构造函数,用于初始化动物的名称
    Animal(const std::string& name) : name(name) {}

    // 纯虚函数,用于表示动物发出声音的行为
    // 因为不同动物叫声不同,所以在基类中不给出具体实现
    virtual void makeSound() const = 0; 

    // 获取动物名称的函数
    std::string getName() const { return name; }

protected:
    // 动物的名称,受保护成员,派生类可以访问
    std::string name;
};

// 派生类:猫类,继承自动物类
class Cat : public Animal {
public:
    // 猫类的构造函数,调用基类的构造函数初始化动物名称
    Cat(const std::string& name) : Animal(name) {}

    // 重写基类的纯虚函数,实现猫发出声音的行为
    void makeSound() const override {
        std::cout << name << " says Meow!" << std::endl;
    }
};

// 派生类:狗类,继承自动物类
class Dog : public Animal {
public:
    // 狗类的构造函数,调用基类的构造函数初始化动物名称
    Dog(const std::string& name) : Animal(name) {}

    // 重写基类的纯虚函数,实现狗发出声音的行为
    void makeSound() const override {
        std::cout << name << " says Woof!" << std::endl;
    }
};

int main() {
    // 创建一个猫对象,传入名称 "Kitty"
    Cat cat("Kitty");
    // 创建一个狗对象,传入名称 "Buddy"
    Dog dog("Buddy");

    // 调用猫对象的发出声音函数
    cat.makeSound();
    // 调用狗对象的发出声音函数
    dog.makeSound();

    return 0;
}

C++ 魔法三钥:解锁高效编程的封装、继承与多态-LMLPHP

 


💯多态


🌠“怎样让同一操作在不同对象有不同效果,使程序更灵活呢?”

1.多态的概念

2.多态的格式

class Shape {
public:
    virtual void draw() = 0;
};

class Circle : public Shape {
public:
    void draw() override {
        // 圆形绘制方法
    }
};

class Rectangle : public Shape {
public:
    void draw() override {
        // 矩形绘制方法
    }
};

3.多态的原理

4.多态的作用

📍以下是一个展示 C++ 多态特性的代码示例:📍 

#include <iostream>

// 基类:形状
class Shape {
public:
    // 纯虚函数,用于绘制形状,不同形状有不同的绘制方式
    virtual void draw() const = 0;
};

// 派生类:圆形
class Circle : public Shape {
public:
    // 重写基类的纯虚函数,实现圆形的绘制方式
    void draw() const override {
        std::cout << "Drawing a circle." << std::endl;
    }
};

// 派生类:矩形
class Rectangle : public Shape {
public:
    // 重写基类的纯虚函数,实现矩形的绘制方式
    void draw() const override {
        std::cout << "Drawing a rectangle." << std::endl;
    }
};

// 函数接受基类指针,通过多态实现不同形状的绘制
void drawShape(const Shape* shape) {
    shape->draw();
}

int main() {
    // 创建圆形对象
    Circle circle;
    // 创建矩形对象
    Rectangle rectangle;

    // 通过基类指针调用 drawShape 函数,实现多态
    drawShape(&circle);
    drawShape(&rectangle);

    return 0;
}

C++ 魔法三钥:解锁高效编程的封装、继承与多态-LMLPHP


💯总结

🔥C++ 的封装、继承和多态是构建高效、灵活和可维护程序的重要基础。封装、继承和多态分别在数据安全、代码复用、程序灵活等方面发挥重要作用。

🚨学习完C++三大特性,我们来看以下代码:

 📍以下是一个综合展示 C++ 封装、继承和多态特性的代码示例:📍

#include <iostream>
#include <string>

// 基类:动物类
class Animal {
protected:
    // 受保护的成员变量,用于存储动物的名字
    std::string name;
public:
    // 构造函数,初始化动物的名字
    Animal(const std::string& animalName) : name(animalName) {}

    // 纯虚函数,用于发出声音,不同动物有不同的实现
    virtual void makeSound() const = 0;

    // 获取动物名字的函数
    std::string getName() const { return name; }
};

// 派生类:猫类
class Cat : public Animal {
public:
    // 构造函数,调用基类构造函数初始化名字
    Cat(const std::string& catName) : Animal(catName) {}

    // 重写纯虚函数,实现猫的声音
    void makeSound() const override {
        std::cout << name << " says Meow!" << std::endl;
    }
};

// 派生类:狗类
class Dog : public Animal {
public:
    // 构造函数,调用基类构造函数初始化名字
    Dog(const std::string& dogName) : Animal(dogName) {}

    // 重写纯虚函数,实现狗的声音
    void makeSound() const override {
        std::cout << name << " says Woof!" << std::endl;
    }
};

// 测试函数,接受基类指针,利用多态调用不同派生类的函数
void testAnimal(const Animal* animal) {
    animal->makeSound();
}

int main() {
    // 创建猫对象
    Cat cat("Fluffy");
    // 创建狗对象
    Dog dog("Rex");

    // 通过基类指针调用测试函数,展示多态
    testAnimal(&cat);
    testAnimal(&dog);

    return 0;
}

 C++ 魔法三钥:解锁高效编程的封装、继承与多态-LMLPHP

在这个代码中:

 


 🎦以上就是本文的全部内容啦~

以后我将深入研究它们与其他 C++ 特性结合,解决更复杂编程问题! 

欢迎关注我👉【A Charmer】 C++ 魔法三钥:解锁高效编程的封装、继承与多态-LMLPHP

11-01 13:48