(一)C++的类与对象
一.c++与c的区别
C语言主要用于系统编程,如操作系统和嵌入式系统。设计目标是提供一种高效、可移植的编程语言,能够直接操作硬件。主要采用过程式编程范式,数据和函数是分离的,程序结构较为线性。
C++语言作为C语言的扩展,设计目标是提供一种支持面向对象编程(OOP)的语言,同时保持C语言的效率。面向对象编程通过封装、继承、多态、抽象和组合等特性,提供了一种更自然、更模块化的方式来组织和管理代码。
二.OOP特点
1. 封装(Encapsulation)
定义:封装是将数据(变量)和操作数据的函数(方法)捆绑在一起,形成一个独立的单元(类),并对外部隐藏内部实现细节。
优点:
数据保护:通过将数据设为私有(private),可以防止外部代码直接访问和修改数据,从而保护数据的完整性。
简化接口:外部代码只需要通过公共(public)接口与对象交互,无需了解内部实现细节。
2. 继承(Inheritance)
定义:继承是允许一个类(子类)继承另一个类(父类)的属性和方法,从而创建一个类层次结构。
优点:
代码重用:子类可以重用父类的代码,避免重复编写相同的代码。
多态性:通过继承,可以实现不同类的对象以统一的方式进行处理。
3. 多态(Polymorphism)
定义:多态是指同一个操作可以作用于不同类型的对象上,并产生不同的行为。
实现方式:
编译时多态(静态多态):通过函数重载和模板实现。
运行时多态(动态多态):通过虚函数和继承实现。
优点:
灵活性:允许程序在运行时根据对象的实际类型调用相应的方法。
可扩展性:可以方便地扩展程序功能,而无需修改现有代码。
4. 抽象(Abstraction)
定义:抽象是指将复杂的现实世界抽象为简单的模型,只关注对象的关键特性,而忽略次要的细节。
实现方式:
抽象类:包含纯虚函数的类,不能实例化,只能被继承。
接口:只包含函数声明的类,通常用于定义一组方法的规范。
优点:
简化复杂性:隐藏复杂的实现细节,只暴露必要的接口。
提高可维护性:通过抽象,可以更容易地修改内部实现,而不影响外部代码。
5. 组合(Composition)
定义:组合是指一个对象包含另一个对象作为其组成部分,从而实现代码重用和模块化。
优点:
灵活性:可以通过组合不同的对象来创建复杂的行为。
松耦合:组合关系比继承关系更松散,更容易维护和扩展。
三.类与对象
1. 类(Class)
类是一种抽象的数据类型,它描述了一组具有相同属性(数据成员)和行为(成员函数)的对象。换句话说,类是一个模板或蓝图,用于创建对象。
特点:
属性(数据成员):类可以包含变量,这些变量描述了对象的特征。例如,一个Person类可能包含name和age属性。
行为(成员函数):类可以包含函数,这些函数定义了对象可以执行的操作。例如,Person类可能包含eat()和sleep()方法。
访问控制:
public:公共成员可以被类的外部访问。
private:私有成员只能在类的内部访问。
protected:受保护成员可以在类的内部及其派生类中访问。
构造函数和析构函数:用于初始化和清理对象。
继承和多态:类可以继承自其他类,并重写基类的方法以实现多态
2. 对象(Object)
对象是类的实例。换句话说,对象是类的一个具体实现,它包含了类中定义的属性和行为。
特点:
实例化:通过类创建对象的过程称为实例化。
状态:对象的状态由其属性值决定。例如,一个Person对象的状态由其name和age属性值决定。
行为:对象的行为由其类中定义的成员函数决定。例如,Person对象可以调用introduce()方法来介绍自己。
四.类与对象的使用
class Person {
private:std::string name;int age;
public:// 构造函数Person(const std::string& name_, int age_) : name(name_), age(age_) {}// 成员函数void introduce() const {std::cout << "Hi, my name is " << name << " and I am " << age << " years old." << std::endl;}// Getter 和 Settervoid setName(const std::string& name_) { name = name_; }std::string getName() const { return name; }void setAge(int age_) { age = age_; }int getAge() const { return age; }
};
int main() {// 根据 Person 类创建多个对象Person alice("Alice", 30);Person bob("Bob", 25);Person charlie("Charlie", 28);// 每个对象都有自己的状态alice.introduce(); // Hi, my name is Alice and I am 30 years old.bob.introduce(); // Hi, my name is Bob and I am 25 years old.charlie.introduce(); // Hi, my name is Charlie and I am 28 years old.return 0;
}
五.拓展
C++和C是两种编程语言,它们有许多相似之处,但也存在一些关键的区别。以下是它们的主要区别及各自的特点:
1. 历史背景与设计目标
C语言:
由Dennis Ritchie在1972年开发,主要用于系统编程,如操作系统和嵌入式系统。
设计目标是提供一种高效、可移植的编程语言,能够直接操作硬件。
C++语言:
由Bjarne Stroustrup在1980年代初期开发,作为C语言的扩展。
设计目标是提供一种支持面向对象编程(OOP)的语言,同时保持C语言的效率。
2. 面向对象编程(OOP)
C语言:
不支持面向对象编程,主要采用过程式编程范式。
数据和函数是分离的,程序结构较为线性。
C++语言:
支持面向对象编程,包括类、继承、多态、封装等特性。
允许程序员通过对象和类来组织代码,提高代码的可重用性和可维护性。
3. 标准库
C语言:
标准库相对较小,主要提供一些基本的函数,如输入输出、字符串处理、内存管理等。
例如,<stdio.h>, <stdlib.h>, <string.h>等。
C++语言:
标准库(STL,Standard Template Library)非常强大,提供了丰富的模板类和函数,如向量、列表、映射、算法等。
例如,, ,