NEXT-E 视觉组第一次培训

c++大一培训

一.认识c++

1.为什么是c++

请添加图片描述

C++是一种高级编程语言,它可以用于开发广泛的应用程序,包括系统软件、游戏、桌面应用程序、移动应用程序和Web应用程序等。与其他编程语言相比,C++有以下优点

  1. 高效性:C++是一种编译型语言,可以生成高效的机器码,它的执行速度非常快。它的运行速度通常比 Python 等解释型语言(解释性语言如Python确实需要被解释器编译成二进制可执行文件后才能运行。)快几个数量级。可用于对实时响应要求比较高的应用程序,如游戏等。

  2. 强大的控制能力:C++提供了丰富的控制结构和指针,可以更好地控制内存和硬件,易于开发高性能的应用程序。

  3. 可移植性:C++ 是一种编译型语言,因此它的代码可以在不同的操作系统和硬件平台上运行。

  4. 面向对象编程:C++ 支持面向对象编程,可以更好地模拟现实世界。它支持类、继承、多态等面向对象特性,使得代码更易于理解和维护。

  5. 标准库丰富:C++ 具有丰富的标准库,包括 STL(Standard Template Library)等,这些库提供了许多现成的函数和类,使得开发人员可以更快速地完成工作。

  6. 底层访问:C++ 提供了对底层系统的访问能力,使得开发人员可以更好地控制硬件和操作系统

2.面向对象和面向过程

面向对象编程(Object Oriented Programming,简称OOP)是一种以对象为基础的编程思想,它将数据和操作封装成属性和方法(成员函数)在一个对象中,通过类和继承来实现代码的复用和扩展;

面向过程编程(Procedure Oriented Programming,简称POP)是一种以过程为中心的编程思想,将问题分解为一系列独立的步骤,每个步骤都是一个函数。
二者的区别:

面向过程分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用即可;

面向对象把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性

而面向对象更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用。

请添加图片描述

3.c++代码运行过程

C++代码从编写到运行的过程可以分为以下几个步骤

编写代码:使用文本编辑器或集成开发环境(IDE)编写C++代码。

编译代码:将编写好的C++代码编译成可执行文件。编译器将代码翻译成计算机能够执行的机器码,并优化代码的性能。可以使用命令行工具或IDE中的编译器进行编译。

链接库文件:如果代码中使用了第三方库,需要将库文件链接到编译生成的代码中,以便程序可以正确地执行。链接器将库文件中的函数和数据添加到可执行文件中,以使程序可以正确地引用它们。

运行程序:在编译和链接完成后,可以使用命令行或IDE中的运行按钮来运行程序。程序将在计算机上执行,并输出结果或执行特定的任务。

下面是一个简单的C++程序示例,演示了从编写到运行的全过程:

编写代码

#include <iostream>
 using namespace std;
int main() {   
  cout << "Hello, world!";  
  return 0;
}

编译

行以下命令:

g++ -o hello hello.cpp

这个命令是在使用g++编译器来编译C++源代码。g++ -o hello hello.cpp的含义是将hello.cpp文件编译为可执行文件hello。其中,-o hello指定了输出文件的名字,而hello.cpp是源代码文件。

4.配置环境

IDE

C++ IDE(Integrated Development Environment,集成开发环境)是一种计算机程序开发工具,专门用于C++编程。它提供了一个集成的开发环境,包括代码编辑器、编译器、调试器和其他开发工具,帮助程序员更快速、更高效地开发C++程序。

C++ IDE通常具有以下功能:

  1. 代码编辑器:IDE提供了一个代码编辑器,可以方便地编写、编辑和调试C++代码。它通常支持语法高亮、自动补全、代码折叠等功能,以提高编码效率。
  2. 编译器:IDE集成了C++编译器,可以将C++代码编译成可执行文件或库文件。编译器通常支持多种编译器选项和优化级别,以满足不同的开发需求。
  3. 调试器:IDE提供了一个调试器,可以帮助程序员在程序运行时进行调试。调试器可以设置断点、查看变量值、单步执行代码等,以帮助程序员找到和解决程序中的错误。
  4. 集成工具:IDE集成了许多其他工具,例如版本控制系统(如Git)、代码管理工具(如Bug跟踪系统)、性能分析器等,可以帮助程序员更高效地管理代码和开发程序。

推荐软件 Clion

Clion的优点有:

安装配置简单:下载相应版本的安装包后,按照提示进行安装即可。安装完成后,需要进行一些基本配置,例如设置编译器、设置环境变量。
代码编辑强大:Clion的代码编辑器功能非常强大,支持多种功能的智能提示和代码补全,可以帮助开发者提高编程效率。另外,Clion还提供了快速跳转、代码自动格式化、多重撤销等功能,大幅度提高了开发效率。
调试测试方便:Clion内置了多种调试工具,包括内存检测、性能分析、单元测试等等。

Clion是基于CMake来管理项目的,所以我们要熟悉CMake基本的语法。

请添加图片描述

cmake

C++在不同平台的安装(编译过程)是不同的。
因为支持C++语言的各个平台的架构不同(比如CPU能够处理的指令集不一样),所以一份C++源代码要想在另一个操作系统平台上执行,就必须用该平台相对应的C++代码编译器对C++源代码重新进行编译,生成该平台可以直接执行的机器代码。

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程),允许开发者编写一种平台无关的

CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化。

CMake是一个开源的、跨平台的自动化建构系统,它用配置文件CMakeLists.txt来控制编译过程,能够输出各种各样的makefile或者

project文件,能测试编译器所支持的C++特性。

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (Demo1)

# 指定生成目标
add_executable(Demo main.cc)
  1. cmake_minimum_required:指定运行此配置文件所需的 CMake 的最低版本;
  2. project:参数值是 Demo1,该命令表示项目的名称是 Demo1
  3. add_executable:将名为 main.cc 的源文件编译成一个名称为 Demo 的可执行文件。

使用第三库opencv

确保已经安装了OpenCV

cmake_minimum_required(VERSION 3.24)
project(practice1)

set(CMAKE_CXX_STANDARD 17)

find_package(OpenCV)

include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(practice1 main.cpp)

上述代码首先使用find_package来搜索OpenCV库。如果找到了OpenCV库,find_package会设置一些变量,例如OpenCV_INCL

UDE_DIRSOpenCV_LIBS,这些变量包含了OpenCV的头文件和库文件路径。

然后,include_directories指令将OpenCV的头文件路径添加到头文件搜索路径中。当工程要用到某个头文件的时候,就会去该路

径下搜索。一般都是在顶层的CmakeList文件中添加搜索路径。

创建第一个c++项目

请添加图片描述

配置 CMakeLists.txt

请添加图片描述

4.运行第一个c++程序

#include <iostream>

using namespace  std;
int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

命名空间

假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。

同样的情况也出现在 C++ 应用程序中。例如,您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。

因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。

定义命名空间

命名空间的定义使用关键字 namespace,后跟命名空间的名称,如下所示:

namespace namespace_name {   // 代码声明 }

//为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称,如下所示:

name::code;  // code 可以是变量或函数

让我们来看看命名空间如何为变量或函数等实体定义范围:

实例
#include <iostream> using namespace std; 
// 第一个命名空间 
namespace first_space{   
  void func(){      
    cout << "Inside first_space" << endl;   
  } 
} 
// 第二个命名空间 
namespace second_space{   
  void func(){      
    cout << "Inside second_space" << endl;   
  } 
} 
int main () {   
  // 调用第一个命名空间中的函数  
  first_space::func();      
  // 调用第二个命名空间中的函数  
  second_space::func();    
  return 0;
}


using 指令

您可以使用 using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。

#include <iostream> 
using namespace std;  
// 第一个命名空间
namespace first_space{  
  void func(){      
    cout << "Inside first_space" << endl;   
  } 
} 
// 第二个命名空间 
namespace second_space{ 
  void func(){      
    cout << "Inside second_space" << endl;  
  } 
} 
using namespace first_space; 
int main () {   
  // 调用第一个命名空间中的函数 
  func();      
  return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Inside first_space

猜你喜欢

转载自blog.csdn.net/weixin_55939638/article/details/133357266