当前位置: 首页 > news >正文

(一)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)非常强大,提供了丰富的模板类和函数,如向量、列表、映射、算法等。
例如,, , , 等。
4. 内存管理
C语言:
主要使用malloc和free进行动态内存分配和释放。
程序员需要手动管理内存,容易导致内存泄漏和悬挂指针等问题。
C++语言:
除了支持C语言的内存管理方式外,还引入了new和delete运算符,用于对象的内存分配和释放。
支持RAII(资源获取即初始化)惯用法,通过构造函数和析构函数自动管理资源。
5. 异常处理
C语言:
不支持异常处理,主要依靠返回值和错误码来指示错误。
错误处理较为繁琐,容易导致代码冗长。
C++语言:
支持异常处理机制,可以使用try, catch, throw等关键字进行错误处理。
使得错误处理更加简洁和清晰。
6. 模板
C语言:
不支持模板,泛型编程较为困难。
需要使用宏或手动编写不同类型的代码来实现类似功能。
C++语言:
支持模板编程,可以编写泛型代码,提高代码的复用性。
例如,标准模板库(STL)就是基于模板实现的。
7. 函数重载
C语言:
不支持函数重载,函数名必须唯一。
不同的函数需要使用不同的名称,容易导致命名冲突。
C++语言:
支持函数重载,可以在同一作用域内定义多个同名函数,只要它们的参数列表不同。
提高了代码的可读性和灵活性。
8. 命名空间
C语言:
不支持命名空间,所有函数和变量都处于全局命名空间中。
容易导致命名冲突。
C++语言:
支持命名空间,可以将代码组织在不同的命名空间中,避免命名冲突。
例如,std命名空间包含了标准库的所有内容。
9. 预处理器
C语言:
预处理器功能较为简单,主要用于宏定义和文件包含。
例如,#define, #include, #ifdef等。
C++语言:
预处理器功能与C语言相同,但C++还提供了更强大的编译时机制,如模板和内联函数,减少了对预处理器的依赖。
10. 其他特性
C语言:
支持指针运算,可以进行低级别的内存操作。
适合编写高效的底层代码。
C++语言:
除了支持C语言的特性外,还引入了许多高级特性,如引用、运算符重载、内联函数、Lambda表达式等。
提供了更丰富的编程工具和更高的抽象层次。


http://www.mrgr.cn/news/89818.html

相关文章:

  • 从零开始:OpenCV 图像处理快速入门教程
  • hive的几种复杂数据类型
  • 16 分布式session和无状态的会话
  • MFC常用操作
  • 【Flutter】platform_view之AppKitView在哪个flutter版本添加的
  • AI-Talk开发板之替换唤醒词
  • Jmeter快速实操入门
  • docker安装es及分词器ik
  • 122,【6】buuctf web [护网杯2018] easy_tornado
  • 交叉编译工具链下载和使用
  • TaskBuilder项目实战:创建项目
  • 深入理解 DeepSeek MOE(Mixture of Experts)
  • 【戒抖音系列】短视频戒除-1-对推荐算法进行干扰
  • jvm 篇
  • 02.07 TCP服务器与客户端的搭建
  • 第三个Qt开发实例:利用之前已经开发好的LED驱动在Qt生成的界面中控制LED2的亮和灭
  • 【鸿蒙开发】第二十四章 AI - Core Speech Kit(基础语音服务)
  • openssl使用
  • Docker安装pypiserver私服
  • 【0401】Postgres内核 CREATE DATABASE database-name 源码实现 ①
  • VSCode便捷开发
  • k8s部署go-fastdfs
  • Android LifecycleOwner 闪退,java 继承、多态特性!
  • python编程-内置函数range(),round()详解
  • 【GeeRPC】Day1:服务端与消息编码
  • 网络编程 day2