c++--------c++概念

embedded/2024/12/23 15:25:08/

定义与起源

  • C++是一种高级编程语言,它是C语言的扩展。C++由Bjarne Stroustrup在20世纪80年代初开发,最初被称为“C with Classes”。其设计目的是在保持C语言高效性的同时,增加面向对象编程(OOP)的特性。例如,C语言主要侧重于过程式编程,像写一个简单的文件读取程序,在C语言中是通过一系列的函数调用来实现,如fopenfreadfclose等函数按顺序操作。而C++在C的基础上,允许将文件读取操作封装到一个类中,这样可以更好地组织和管理代码。

主要特性

  • 面向对象编程(OOP)
    • C++支持类和对象的概念。类是一种用户定义的数据类型,它封装了数据成员(变量)和成员函数(方法)。例如,定义一个简单的Circle类来表示圆:
    class Circle {
    public:double radius;double calculateArea() {return 3.14 * radius * radius;}
    };
    
    在这个例子中,radius是数据成员,calculateArea是成员函数。可以通过创建Circle类的对象来使用这些成员,如Circle myCircle; myCircle.radius = 2.0; double area = myCircle.calculateArea();
  • 继承
    • 继承允许创建一个新类(派生类),它继承了现有类(基类)的属性和行为。例如,定义一个ColoredCircle类继承自Circle类:
    class ColoredCircle : public Circle {
    public:std::string color;
    };
    
    这里ColoredCircle类继承了Circle类的radius成员和calculateArea函数,同时还添加了自己的color成员。
  • 多态
    • 多态是指同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在C++中,通过虚函数来实现多态。例如,有一个基类Shape和两个派生类CircleRectangle,都有一个draw函数:
    class Shape {
    public:virtual void draw() {std::cout << "Drawing a shape" << std::endl;}
    };
    class Circle : public Shape {
    public:void draw() override {std::cout << "Drawing a circle" << std::endl;}
    };
    class Rectangle : public Shape {
    public:void draw() override {std::cout << "Drawing a rectangle" << std::endl;}
    };
    
    可以通过基类指针来调用派生类的函数,如Shape* shape1 = new Circle; shape1->draw(); // 输出Drawing a circle,根据对象的实际类型来决定调用哪个draw函数。
  • 模板(Templates)
    • 模板是C++的一个强大特性,它允许编写泛型代码。例如,定义一个简单的模板函数来交换两个变量的值:
    template<typename T>
    void swap(T& a, T& b) {T temp = a;a = b;b = temp;
    }
    
    这个函数可以用于交换不同类型的变量,如int num1 = 1, num2 = 2; swap(num1, num2);或者double d1 = 1.0, d2 = 2.0; swap(d1, d2);
  1. 应用领域
    • 系统软件
      • C++在操作系统、编译器等系统软件的开发中广泛应用。例如,Linux操作系统的部分代码就是用C++编写的。C++的高效性使得它能够很好地处理系统资源的管理和底层操作。
    • 游戏开发
      • 许多大型游戏的引擎都是用C++编写的。像Unreal Engine(虚幻引擎),它提供了高性能的图形渲染、物理模拟等功能。C++可以直接操作硬件,能够充分利用计算机的性能来实现复杂的游戏逻辑和逼真的视觉效果。
    • 数据库管理系统
      • C++用于开发高性能的数据库管理系统。例如,MySQL数据库的部分核心代码是C++编写的。C++能够高效地处理大量的数据存储、检索和管理任务。
  2. 与其他语言的比较
    • 与C语言比较
      • C++继承了C语言的语法和高效性。C语言主要是过程式编程,而C++在此基础上增加了面向对象编程等特性。例如,C语言中没有类的概念,在处理复杂的软件项目时,代码的组织和复用性相对较差,而C++可以通过类来更好地组织代码结构。
    • 与Java比较
      • Java是一种纯面向对象的编程语言,具有自动内存管理(垃圾回收)的特性。C++虽然也支持面向对象编程,但需要开发者手动管理内存(虽然也有智能指针等工具来辅助)。另外,C++的执行效率通常比Java高,因为Java有一层虚拟机的中间层,而C++编译后的代码直接在机器上运行。例如,对于一些对性能要求极高的实时系统,C++可能是更好的选择。

在这里插入图片描述

C++程序结构

  1. 头文件部分(#include)

    • 作用
      • 头文件包含是C++程序结构的重要部分。#include指令用于将其他头文件的内容引入到当前文件中。头文件中通常包含函数声明、类定义、常量定义和模板声明等内容,这使得程序可以复用已有的代码定义,避免重复编写相同的代码片段。
    • 示例
      • 标准库头文件:#include <iostream>是C++中最常用的头文件之一。它提供了输入输出流的功能,如std::cout用于标准输出(控制台输出),std::cin用于标准输入(控制台输入)。例如,在下面的代码中:
      #include <iostream>
      int main() {std::cout << "Hello, World!" << std::endl;return 0;
      }
      
      因为包含了<iostream>头文件,所以能够使用std::cout来输出字符串。
      • 用户自定义头文件:假设你有一个名为myfunctions.h的头文件,其中定义了一些函数声明,如int add(int a, int b);。在主程序文件(假设为main.cpp)中,你可以使用#include "myfunctions.h"来包含这些函数声明,这样在main.cpp中就可以调用add函数。
  2. 命名空间(namespace)使用

    • 作用
      • 命名空间用于将代码组织在不同的逻辑区域,主要目的是避免命名冲突。在大型项目或者使用多个库时,不同的部分可能会定义相同名称的函数、类或变量。命名空间就像一个容器,将相关的代码元素封装在一起,通过特定的语法来访问其中的内容。
    • 示例
      • 标准命名空间:在C++中,标准库中的大部分内容都位于std命名空间中。例如,std::coutstd::cin前面的std就是命名空间。你可以通过using namespace std;来避免每次都写std::前缀,但这种做法在大型项目中可能会导致命名冲突。更好的做法是只引入需要使用的部分,如using std::cout; using std::cin;或者在使用时完整地写上std::前缀。
      • 用户自定义命名空间:假设你定义了一个用户自定义命名空间MyNamespace,其中包含一个函数void myFunction()。定义如下:
      namespace MyNamespace {void myFunction() {// 函数体内容}
      }
      
      要使用这个函数,可以在main函数或者其他函数中通过MyNamespace::myFunction();来调用。
  3. 全局变量和全局函数声明与定义(如果有)

    • 作用
      • 全局变量是在所有函数和类外部定义的变量,其作用域是整个程序文件。全局函数是在全局范围内定义的函数,可在程序的任何地方调用(只要在声明或定义之后)。不过,过多地使用全局变量和函数可能会导致程序的可读性和可维护性变差,因为它们可以在程序的任何地方被修改。
    • 示例
      • 全局变量声明和定义:
      int globalVariable = 10;  // 全局变量定义,同时初始化
      extern int anotherGlobalVariable;  // 全局变量声明,假设在其他文件中定义
      
      • 全局函数声明和定义:
      int globalFunction(int a, int b) {  // 全局函数定义return a + b;
      }
      extern int anotherGlobalFunction(int a);  // 全局函数声明,假设在其他文件中定义
      
  4. 主函数(main) - 程序的入口点

    • 作用
      • main函数是C++程序的起点,程序从main函数的第一条语句开始执行。它有两种常见的形式:int main()int main(int argc, char* argv[])int main()是最简单的形式,函数返回一个int类型的值,通常用于表示程序的退出状态(0表示正常退出,非0表示异常退出)。int main(int argc, char* argv[])用于处理命令行参数,其中argc表示命令行参数的个数,argv是一个字符指针数组,argv[0]通常是程序的名称,argv[1]argv[argc - 1]是实际的命令行参数。
    • 示例
      • 简单的main函数:
      int main() {std::cout << "This is a simple C++ program." << std::endl;return 0;
      }
      
      • 带有命令行参数处理的main函数:
      int main(int argc, char* argv[]) {if (argc > 1) {std::cout << "Command - line arguments: ";for (int i = 1; i < argc; ++i) {std::cout << argv[i] << " ";}std::cout << std::endl;} else {std::cout << "No command - line arguments." << std::endl;}return 0;
      }
      
  5. 函数定义(包括成员函数和非成员函数)

    • 作用
      • 函数是一段完成特定任务的代码块。函数定义包括函数头(返回类型、函数名称和参数列表)和函数体(花括号内的代码)。函数可以接收参数,执行一系列操作,并返回一个结果(如果返回类型不是void)。在面向对象编程中,还有成员函数,它们是类的一部分,用于操作类的对象的数据成员。
    • 示例
      • 非成员函数定义:
      int add(int a, int b) {return a + b;
      }
      
      • 成员函数定义(假设存在一个类MyClass):
      class MyClass {
      public:int data;void setData(int value) {data = value;}
      };
      
  6. 类定义(如果是面向对象程序)

    • 作用
      • 类是一种用户定义的数据类型,用于封装数据成员(变量)和成员函数(方法)。类的定义包括类头(class关键字、类名称和可能的继承关系)和类体(花括号内的内容,包括数据成员和成员函数的声明)。通过类可以创建对象,对象是类的实例,它们具有自己的数据成员副本,并可以调用成员函数来操作这些数据。
    • 示例
      • 简单的类定义:
      class Rectangle {
      public:int width;int height;int area() {return width * height;}
      };
      
      • 带有构造函数和析构函数的类定义:
      class ComplexNumber {
      public:double real;double imaginary;ComplexNumber(double r = 0.0, double i = 0.0) : real(r), imaginary(i) {}  // 构造函数~ComplexNumber() {}  // 析构函数double magnitude() {return std::sqrt(real * real + imaginary * imaginary);}
      };
      

在这里插入图片描述


http://www.ppmy.cn/embedded/148103.html

相关文章

python 中执行from elasticsearch import Elasticsearch,AsyncElasticsearch 报错

在 Python 中执行 from elasticsearch import Elasticsearch, AsyncElasticsearch 时,如果提示 AsyncElasticsearch 不存在,可能是因为以下几个原因: 1. 安装的 elasticsearch 库版本不匹配 AsyncElasticsearch 是在 elasticsearch 库的较新版本中引入的。如果你安装的版本…

智能体实战(需求分析助手)二、需求分析助手第一版实现(支持需求提取、整理、痛点分析、需求分类、优先级分析、需求文档生成等功能)

基于提供的调用 qwen-plus 大模型的实战代码&#xff0c;我将对需求分析助手的第一迭代功能目标进行实现设计。以下是基于该示例代码的第一迭代功能实现细化方案&#xff1a; 功能 1&#xff1a;用户与需求分析助手交互界面&#xff08;文本交互&#xff09; 实现步骤&#xf…

git branch -r(--remotes )显示你本地仓库知道的所有 远程分支 的列表

好的&#xff0c;git branch -r 这个命令用于列出远程分支。让我详细解释一下&#xff1a; 命令&#xff1a; git branch -rdgqdgqdeMac-mini ProductAuthentication % git branch -rorigin/main作用&#xff1a; 这个命令会显示你本地仓库知道的所有 远程分支 的列表。它不…

网络基础(二)

目录 1. 跨网段通信1.1 IP 地址1.2 通信流程1.3 IP vs Mac1.4. 数据包封装和分用 2. 端口号3. TPC && UDP4. 网络字节序 网络基础&#xff08;一&#xff09; 上一篇文章中&#xff0c;我们介绍了网络协议的基本概念和分层结构。协议是确保不同主机间顺利通信的约定&am…

ChatGPT之父:奥尔特曼

奥尔特曼 阿尔特曼一般指萨姆奥尔特曼,他是OpenAI的联合创始人兼首席执行官,被称为“ChatGPT之父”.以下是其具体介绍: 个人经历 1985年4月22日出生于美国芝加哥,8岁学会编程,9岁拥有电脑,对信息技术和互联网产生兴趣.高中就读于约翰巴勒斯中学,后进入斯坦福大学主修计…

如何实现层叠布局

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了GirdView Widget,本章回中将介绍Stack这种Widget,闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 在Flutter中Stack主要用来叠加显示其它的Widget,类似我们日常生活中的楼层或者说PS中的图层,因此它也是一…

Python中面向对象编程思想

目录 前言 一、面向对象是什么&#xff1f; 二、编程的核心概念 1.类与对象 2.常见类内置方法 小结 三、面向对象编程的特性 四、实例分析 总结 前言 本文旨在深入探讨Python中的面向对象编程&#xff08;OOP&#xff09;概念&#xff0c;包括其核心思想、实现方式以及最佳实践…

RK356x bsp 5 - 海华AW-CM358SM Wi-Fi/Bt模组调试记录

文章目录 1、环境介绍2、目标3、海华AW-CM358SM3.1、基本信息3.2、支持SDIO3.03.3、电气特性 4、适配流程步骤5、让SDIO控制器工作&#xff0c;且可以扫到WIFI卡5.1、dts配置5.2、验证 6、Wi-Fi 适配6.1、dts配置6.2、驱动移植6.2.1、kernel menuconfig6.2.2、传统驱动移植6.2.…