【NOI级-C++程序设计:1、面向对象的程序设计思想 (OOP)】

1、定义:面向对象的程序设计(Object-Oriented Programming, OOP)是一种通过 “对象” 来组织程序的编程方式,它将数据(属性)和操作数据的函数(方法)捆绑在一起,形成一个独立的单元。它结合了封装、继承、多态和抽象四大特性,并通过类(class)和对象(object)实现。

2、面向对象的基本概念
(1)类(Class)
具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,是用户自定义的数据类型,定义了对象的属性和行为(即方法),也可以说类的实例是对象。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
(2)对象(Object)
定义:
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
对象的状态和行为:
对象具有状态,一个对象用数据值来描述它的状态。
对象还有操作,用于改变对象的状态,操作就是对象的行为。
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。
应用举例:
class Car {
private:
string brand;
string model;
int year;

public:
// 构造函数
Car(string b, string m, int y) : brand(b), model(m), year(y) {}

// 方法
void displayInfo() const {
    cout << brand << " " << model << " (" << year << ")" << endl;
}

};
// 创建对象
Car myCar(“Toyota”, “Corolla”, 2020);
myCar.displayInfo();

3、C++ 是最早支持 OOP 的编程语言之一,其 OOP 思想主要通过以下核心概念实现:
封装(Encapsulation)
目的:将数据(属性)和操作数据的函数(方法)捆绑在一起(即对象),并通过访问控制(private、protected、public)隐藏内部实现细节。
访问控制:
private:只能被类内部的方法访问,类的定义中,私有属性通过公有方法暴露访问。
protected:可被类及其子类的方法访问。
public:可被任何代码访问
作用:提高安全性(通过访问控制,如private/public),降低系统耦合度。
应用举例:
class BankAccount {
private: // 数据隐藏
double balance;
public:
// 公开接口
void deposit(double amount) {
if (amount > 0) balance += amount;
}

double getBalance() const {
    return balance;
}

};

继承(Inheritance)
目的:创建新类(子类)来继承现有类(父类)的属性和方法,实现代码复用和层次化设计。
OOP 在 C++ 中的优势
代码复用:通过继承减少重复代码,实现代码复用,建立类之间的层次关系。
可维护性:封装使代码结构清晰,修改局部不影响整体。
扩展性:通过多态和虚函数方便添加新功能。
安全性:通过访问控制保护数据不被非法访问。
应用举例:
// 基类
class Animal {
public:
void eat() { cout << “Eating…” << endl; }
};
// 派生类
class Dog : public Animal {
public:
void bark() { cout << “Barking…” << endl; }
};

多态(Polymorphism)
同一操作作用于不同对象时产生不同的行为。
实现方式:
编译时多态:方法重载(Overload)。
运行时多态:方法重写(Override) + 父类引用指向子类对象。
作用:增强代码灵活性和可扩展性。
应用举例:
class Shape {
public:
virtual void draw() const = 0; // 纯虚函数
};

class Circle : public Shape {
public:
void draw() const override {
cout << “Drawing a circle” << endl;
}
};
class Square : public Shape {
public:
void draw() const override {
cout << “Drawing a square” << endl;
}
};
// 使用多态
void drawShape(const Shape& shape) {
shape.draw();
}

抽象(Abstraction)
提取核心特征,忽略非必要细节。通过抽象类(abstract class)或接口(interface)定义规范。
应用举例:
// 抽象类
class AbstractEmployee {
virtual void askForPromotion() = 0; // 纯虚函数
};
class Employee : public AbstractEmployee {
private:
string name;
int age;
public:
void askForPromotion() override {
if (age > 30) cout << name << " got promoted!" << endl;
else cout << name << " not promoted" << endl;
}
};

4、五大设计原则(SOLID)
单一职责原则(SRP)
一个类只负责一项功能(如User类处理用户数据,Logger类处理日志)。
开闭原则(OCP)
对扩展开放(通过继承/组合),对修改关闭(不改动原有代码)。
里氏替换原则(LSP)
子类必须能完全替代父类,不破坏程序逻辑。
接口隔离原则(ISP)
客户端不应依赖它不需要的接口。
依赖倒置原则(DIP)
高层模块不依赖低层模块,二者依赖抽象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

papership

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

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

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

打赏作者

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

抵扣说明:

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

余额充值