网站建设可行性方案模板,wordpress的关键字哪里设置,开发必备软件,网站被篡改怎样做快来参与讨论#x1f4ac;#xff0c;点赞#x1f44d;、收藏⭐、分享#x1f4e4;#xff0c;共创活力社区。 目录
#x1f4af;前言
#x1f4af;封装
1.封装概念
2.封装格式
3.封装的原理
4.封装的作用
#x1f4af;继承
1.继承的概念
2.继承格式
3.继承的… 快来参与讨论点赞、收藏⭐、分享共创活力社区。 目录
前言
封装
1.封装概念
2.封装格式
3.封装的原理
4.封装的作用
继承
1.继承的概念
2.继承格式
3.继承的原理
4.继承的作用
多态
1.多态的概念
2.多态的格式
3.多态的原理
4.多态的作用
总结 前言
在 C 编程中你是否曾对如何组织代码、实现代码复用以及处理不同对象的行为感到困惑
你是否渴望深入理解一些核心概念从而能够更加高效地构建复杂的程序呢 如果你的答案是肯定的那么 C 的三大特征 —— 封装、继承和多态或许就是你一直在寻找的关键所在。 这三个特征犹如三把神奇的钥匙能够帮助我们打开高效编程的大门。 封装
“如何保护数据的安全性和完整性同时使代码的结构更加清晰呢❓”
1.封装概念 封装是将数据和操作数据的方法封装在一个类里面并通过访问控制符来限制对类成员的访问。就像给它们穿上保护衣只能通过特定接口访问修改数据。 2.封装格式 在类的定义中通过private、public和protected等访问控制符来实现封装。例如 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) {}// 获取姓名的函数通过公共接口访问私有成员变量namestd::string getName() const { return name; }// 获取年龄的函数通过公共接口访问私有成员变量ageint getAge() const { return age; }// 设置年龄的函数通过公共接口修改私有成员变量agevoid 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;
} 继承
“如何避免重复写相似代码建立代码层次呢❓” 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() {// 创建一个猫对象传入名称 KittyCat cat(Kitty);// 创建一个狗对象传入名称 BuddyDog dog(Buddy);// 调用猫对象的发出声音函数cat.makeSound();// 调用狗对象的发出声音函数dog.makeSound();return 0;
} 多态 “怎样让同一操作在不同对象有不同效果使程序更灵活呢” 1.多态的概念 同一操作对不同对象有不同表现形式C 中主要通过虚函数和函数重载实现。 2.多态的格式 基类中定义虚函数virtual 返回值类型 函数名(参数列表) 0;纯虚函数或virtual 返回值类型 函数名(参数列表);普通虚函数派生类中重写返回值类型 函数名(参数列表) override;。例如 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 的封装、继承和多态是构建高效、灵活和可维护程序的重要基础。封装、继承和多态分别在数据安全、代码复用、程序灵活等方面发挥重要作用。
学习完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;
} 在这个代码中 封装在Animal类中将成员变量name设为受保护的外部不能直接访问只能通过公共接口如getName函数来获取动物的名字实现了封装。继承Cat类和Dog类都继承自Animal类继承了基类的成员变量和函数并且可以在派生类中添加自己特有的行为。多态通过基类指针调用makeSound函数时根据实际指向的对象类型猫或狗会自动调用相应派生类的重写函数实现了多态。这样可以用统一的接口处理不同类型的对象。 以上就是本文的全部内容啦~
以后我将深入研究它们与其他 C 特性结合解决更复杂编程问题
欢迎关注我【A Charmer】