这是一种利用对象来解决现实生活中的问题的编程方式。
遵循 OOPS 模式的语言C++, Java, Python, JavaScript, Ruby, Swift, Objective-C, C#
OOPS 概念: 班- 它也称为对象的蓝图。
- 它是一种用户自定义的数据结构,用于创建类的实例。它由数据成员和成员函数组成。
- (注:类本身不占用内存。它们仅仅是一个用来创建对象的模板)
- 它是类的一个实例对象。
- 对象是按照类的蓝图创建的。
- 这向用户展示重要信息,而隐藏内部细节。
- 它指的是只对外提供必要的信息,隐藏背景细节和实现细节。
- 抽象化就是简化接口,使外部只需要关注必要的信息。
例。我们知道手机的一些重要特性,比如电池、SIM卡(SIM卡)、屏幕设计和操作系统(OS)。但我们可能不太了解它的内部运作,比如内存是如何分配的等内部技术细节。
封装概念- 这是一个原则,即所有的关键信息都包含在对象内部。
- 封装通过将对象的数据成员设为私有来保护对象的内部状态。封装隐藏了类的内部实现细节,使外部代码无法访问。
- 封装关注的是通过限制对内部状态的访问来确保数据安全和完整性。
在OOPS中,类可以继承其他类的属性和特征。
继承的类型单一继承性: 子类直接继承自基类
多个父类的继承:
子类可以从多个父类继承特性。
如图所示:
多层继承:
一个子类继承了一个由另一个基类派生的类。
这是一张图片。
层次继承:
多个子类从一个基类继承。
混合继承方式:
由上述提到的多种继承类型组成的继承方式。
你知道什么是多态吗?
这意味着有很多形式。
编译时多态性(方法的重载):这通常发生在同一个类中,有多个同名方法但参数不一样的情况。
class Example {
public:
void display(int i) {
std::cout << "整数: " << i << std::endl;
}
void display(double d) {
std::cout << "浮点数: " << d << std::endl;
}
};
全屏 退出全屏
运行时多态(方法覆盖):- 这发生在子类提供了已经在其基类中定义的方法的具体实现方式。
- 这通常通过C++中的虚函数来达成。
class Base {
public:
virtual void show() {
std::cout << "这是基类" << std::endl;
}
// 这是一个基础类
};
class Derived : public Base {
public:
void show() override {
std::cout << "这是派生类" << std::endl;
}
// 这是一个派生类,它重写了基础类的show函数
};
切换到全屏: 退出全屏,
动态绑定(动态调用)这是在运行时决定执行的方法或函数,而不是在编译期间决定。
动态类型这指的是编程语言能运行时确定变量类型,而非编译时。
动态加载内容(即网页加载时内容的动态更新)动态加载就是一种机制,程序在需要的时候才把库或者模块加载到内存里。这样可以减少内存使用并提高性能,因为它只加载必要的部分。
抽象基类在 C++ 中,抽象类是指不能被单独实例化的类,并且设计用于被其他类继承。例如,它至少有一个纯虚成员函数。
#include <iostream>
// 形状类
class Shape {
public:
// 纯虚函数
virtual void draw() const = 0;
// 设置颜色
void setColor(const std::string& color) {
this->color = color;
}
protected:
std::string color;
};
// 派生类
class Circle : public Shape {
public:
void draw() const override {
std::cout << "画一个颜色为 " << color << " 的圆形" << std::endl;
}
};
int main() {
// 不能直接实例化形状类
Circle c;
// 创建一个圆形对象并设置颜色为红色
c.setColor("red");
// 画出圆并输出颜色信息
c.draw();
return 0;
}
进入全屏 退出全屏
界面:C++ 中的接口实际上是一个抽象基类,仅仅包含纯虚函数。
#include <iostream>
// 接口
class Drawable {
public:
// 纯虚成员函数
virtual void draw() const = 0;
};
// 另一个可着色接口
class Colorable {
public:
// 纯虚成员函数
virtual void setColor(const std::string& color) = 0;
};
// 实现了多个接口
class Square : public Drawable, public Colorable {
public:
void draw() const override {
std::cout << "绘制一个颜色为" << color << "的正方形" << std::endl;
}
void setColor(const std::string& color) override {
this->squareColor = color;
}
private:
std::string squareColor;
};
int main() {
Square s;
s.setColor("蓝");
s.draw();
return 0;
}
按F11键可以进入或退出全屏模式
结构体 vs 类型(数据结构的两种形式)默认访问权限:
结构体:结构体的成员默认是公开的。
类:类的成员默认是私有的。
它适用于简单的数据结构,其中数据封装不是主要考虑因素,
它用于更复杂的对象,一般需要封装、数据私有化以及成员方法。
这是一个特殊的类成员函数,当创建该类的对象时会自动调用它,用于初始化该对象。
#include <iostream>
class MyClass {
public:
// 构造函数调用。值:
MyClass(int value) : value(value) {
std::cout << "构造函数调用。值: " << value << std::endl;
}
// 析构函数
~MyClass() {
std::cout << "析构函数调用。释放资源,完成清理。" << std::endl;
}
// 显示值的函数
void display() const {
std::cout << "值: " << value << std::endl;
}
private:
int value;
};
int main() {
// 创建一个MyClass的对象
MyClass obj(10);
obj.display();
// 析构函数会在'obj'不再使用时自动调用
return 0;
}
全屏进入 全屏退出
终结者这是一个类的特殊成员函数,当该类的对象被删除时会自动调用。它清理对象在其存在期间可能占用的资源。(提示:不能在C++中重载析构函数这一点)
记得保持联系哦!
如果你喜欢这篇内容,记得关注我的社交媒体,获取更多更新和见解哦:
推特: tuītè: https://x.com/MadhavGanesan
照片墙: zhàopiànqiáng: https://www.instagram.com/madhavganesan
领英: língyīng: https://www.linkedin.com/in/madhav-ganesan-19b0a5253
共同学习,写下你的评论
评论加载中...
作者其他优质文章