计模式是在软件开发过程中,经过实践积累而形成的一套解决常见问题的最佳实践方法。设计模式是软件开发中的宝贵工具,它们可以帮助开发人员更快速、更有效地解决常见问题,提高代码质量,减少重复劳动,并促进团队间的合作与共享。
C 面向对象设计模式简单介绍
- 工厂模式(Factory Pattern):通过提供一个创建对象的接口,而不指定实际创建的类来创建对象的模式。可以有简单工厂、工厂方法和抽象工厂等变体。
- 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点来访问该实例。
- 适配器模式(Adapter Pattern):允许接口不兼容的类之间合作,将一个类的接口转换成客户希望的另一个接口。
- 装饰器模式(Decorator Pattern):允许向一个对象动态地添加新的功能,同时不改变其结构。
- 观察者模式(Observer Pattern):定义对象间的一对多依赖关系,使得当一个对象的状态发生改变时,
#include <iostream>
// 基类 Shape
class Shape {
public:
virtual void draw() = 0;
};
// 具体类 Circle
class Circle : public Shape {
public:
void draw() override {
std::cout << "Draw Circle" << std::endl;
}
};
// 具体类 Rectangle
class Rectangle : public Shape {
public:
void draw() override {
std::cout << "Draw Rectangle" << std::endl;
}
};
// 具体类 Triangle
class Triangle : public Shape {
public:
void draw() override {
std::cout << "Draw Triangle" << std::endl;
}
};
// 工厂类 ShapeFactory
class ShapeFactory {
public:
static Shape* createShape(const std::string& type) {
if (type == "Circle") {
return new Circle();
} else if (type == "Rectangle") {
return new Rectangle();
} else if (type == "Triangle") {
return new Triangle();
}
return nullptr;
}
};
// 客户端代码
int main() {
Shape *circle = ShapeFactory::createShape("Circle");
Shape *rectangle = ShapeFactory::createShape("Rectangle");
Shape *triangle = ShapeFactory::createShape("Triangle");
circle->draw();
rectangle->draw();
triangle->draw();
delete circle;
delete rectangle;
delete triangle;
return 0;
}
C 面向对象的基础
C 是一种支持多种编程范式的语言,其中面向对象编程(Object-Oriented Programming,OOP)是C 的核心特性之一。面向对象编程是一种以数据为中心的编程范式,它将数据和处理数据的方法结合在一起,形成对象。以下是C 面向对象编程的一些基础概念:
- 类(Class) 类是创建对象的蓝图或模板,它定义了对象的属性(数据成员)和行为(成员函数)。类可以看作是一个逻辑实体,它封装了数据和操作这些数据的函数。
class MyClass {
public:
int myData; // 公有数据成员
void myFunction(); // 公有成员函数
private:
int privateData; // 私有数据成员
};
- 对象(Object) 慕课C 中高级工程师中,对象是根据类创建的实例。每个对象都拥有类中定义的属性和方法,并且可以独立于其他对象存在。
MyClass myObject; // 创建MyClass的一个对象
- 构造函数(Constructor) 构造函数是一种特殊的成员函数,用于在创建对象时初始化对象。它与类名相同,没有返回类型,也不能指定参数模式。
class MyClass {
public:
MyClass() { // 构造函数
// 初始化代码
}
};
- 析构函数(Destructor) 析构函数与构造函数相对应,它在对象生命周期结束时被调用,用于执行清理工作。析构函数也没有返回类型,并且与类名相同,但在前面加上波浪号(~)。
class MyClass {
public:
~MyClass() { // 析构函数
// 清理代码
}
};
- 成员函数(Member Function) 成员函数是定义在类内部的函数,它们可以访问类的私有成员。成员函数可以是公有的(public)或私有的(private)。
class MyClass {
public:
void myFunction() {
// 可以访问类的成员变量和其它成员函数
}
};
- 数据封装(Data Encapsulation) 封装是将对象的数据(属性)和行为(方法)组合在一起,并隐藏内部细节,只提供必要的接口。封装可以通过访问修饰符(public, private, protected)实现。
- 继承(Inheritance) 继承是一种机制,允许一个类(子类或派生类)继承另一个类(基类或父类)的属性和方法。这支持代码复用并可以建立类之间的层次结构。
class BaseClass {
};
class DerivedClass : public BaseClass { // 公有继承
// 继承了BaseClass的成员
};
- 多态(Polymorphism) 多态是指允许不同类的对象对同一消息做出响应的能力,但具体采用哪个类的方法取决于对象的实际类型。多态可以通过虚函数(virtual functions)和函数重载(overloading)实现。
class BaseClass {
public:
virtual void doSomething() {
// 基类的实现
}
};
class DerivedClass : public BaseClass {
public:
void doSomething() override { // 重写基类函数
// 派生类的实现
}
};
- 抽象类(Abstract Class) 抽象类是不能被实例化的类,它通常包含至少一个纯虚函数。抽象类用于定义其他类的接口。
class AbstractClass {
public:
virtual void pureVirtualFunction() = 0; // 纯虚函数
};
慕课C 中高级工程师,面向对象编程的这些概念提供了一种强大的工具,用于设计复杂软件系统,使得代码更加模块化、易于理解和维护。C 的面向对象特性还支持其他高级概念,如模板(templates)、异常处理(exception handling)和命名空间(namespaces),这些都有助于构建大型和复杂的软件应用程序。