首页 > 其他分享 >初步入门C ++之类的概念

初步入门C ++之类的概念

时间:2024-07-30 18:56:22浏览次数:14  
标签:文件 入门 area ++ int printf 之类 构造函数 函数

文章目录

0 Hello World!

#include <iostream>														//相当于#include <stdio.h>

int main(int argc, char argv[])
{
  char				c;
  
  std::cout << "Hello World!\n" << std::endl;	//std是一个标准库的命名空间,cout是其中的一个对象,代表标准输出流。
  																						//::表示作用域解析运算符(scope resolution operator)。			  																						 	    它用于访问某个命名空间或类中的成员。
  c = std::cin.get();
  std::cout << "You entered: " << c << std::endl;
  return 0;																				
}

在这里插入图片描述

1 编译过程

​ 编译分为预处理,编译,汇编,链接四个基本过程,他们的作用如下:

  1. 预处理:预处理由预处理器 CPP 完成,它会将 .c 文件预处理为 .i 文件( .i 文件的本质还是一个 .c 文件)。预处理就是将预处理命令,宏等进行简单的展开和替换。预处理会将 #define 宏定义替换展开后删除,判断条件编译,将 #include<> 头文件复制粘贴进来,同时删除注释,添加行号和文件标识,还会保留 #pragma 编译器指令。

  2. 编译:编译由编译器 CC 完成,它会将 .i 文件变为 .s 文件。编译器首先会检查语法规则,然后将 C 语言翻译为等效的,优化后的汇编语言,我们语言的可移植性也从这里体现,对于不同的平台,我们只需要选择不同的编译器即可,这样,同一个 C++ 语言源代码,就能生成在不同平台上的汇编语言文件。(Ps:编译器的优化等级并不是越高越好,我们常用的配置是 OS,它约等于 O2 等级)。

  3. 汇编:汇编由汇编器 AS 完成,它会将 .s 文件汇编为 .o 文件( windows 下是 .obj 文件)。汇编就是将汇编语言转化为对应的二进制文件,也称目标文件,目标文件至少有代码段和数据段两段组成。

  4. 链接:链接由链接器 LD 完成。它会将 .o 目标文件通过链接变为 ELF 文件,即可执行文件。链接会将动态库或者静态库与本文件进行链接,我们在 #include<头文件> 的时候,头文件中只有函数的声明信息,那么函数体在哪里找呢,没错,就是在动态库和静态库里,而将这些库,声明联合到一起的过程,便称之为链接,链接是通过函数的签名来找到对应的函数体的,同时main函数的入口也是在这个时候确定下来的

2 类

2.1 类的概念

​ 简单来说,类是一种数据类型,其实就是数据函数的结合体,在 C 语言中,若我们需要计算多个矩形的面积,我们一般会定义多个矩形的数据,然后调用相应的函数来计算他们:

int area(int x, int y)
{
  area = x * y;
  return area;
}


int main(int argc, char* argv[])
{
  	int x1,y1,area1;
  	int x2,y2,area2;
  	int x3,y3,area3;

    x1 = 2;
    y1 = 5;
    area1 = area(x1, y1);
    printf("area1:%d", area1);

    x2 = 4;
    y2 = 20;
    area2 = area(x2, y2);
    printf("area2:%d", area2);

    x3 = 30;
    y3 = 1;
    area3 = area(x3, y3);
    printf("area3:%d", area3);
}

但是在面向对象编程中,当我们有了类的概念后,就可以将数据与函数集合起来管理,如下:

#include <iostream>

class rect
{
public:				//类默认的变量是private私有的,为了让外面可以访问,我们使用使用public公开这些变量。
    int     x;
    int     y;
    int     area;

    void area_printf()
    {
        area = x * y;
        std::cout << area << std::endl;	
        return;
    }
};

int main(int argc, char* argv[])
{
    rect rect1,rect2,rect3;

    rect1.x = 2;
    rect1.y = 5;
    rect1.area_printf();

    rect2.x = 4;
    rect2.y = 20;
    rect2.area_printf();

    rect3.x = 30;
    rect3.y = 1;
    rect3.area_printf();
}

//我们解读一下这段代码:
  1. 定义一个类 rect ,其中包括 x,y,area 数据和一个 void area_printf() 的方法
  2. 可以看到该方法中需要 x,y,area 数据,但是我们并没有用形参传入 void area_printf,但是为什么可以正常运行呢?
  3. 因为这个类已经包含了这三个数据了,所以可以直接使用。
  4. 也就是说,我们每声明一个新的 rect 类,就会自动生成对应的 x,y,area 数据。在这个类里面的函数,也就是“方法”,就可以使用这些数据了,这也是为什么我们说,类其实就是,数据和函数的结合体

在这里插入图片描述

2.2 构造函数与析构函数

​ 之前我们了解到,在类中我们可以创建不同的函数,即不同的“方法”。那我们现在来思考一个问题,当我们创建一个新的类时,若里面有很多的数据需要初始化,我们可以写一个初始化的方法然后调用它,但是显然当类的数量多起来的时候,代码就会显得冗余了,但是c++为我们提供了构造函数析构函数构造函数会在类被创建时自动执行,这样就免去了我们调用它的过程,反之,当一个类被销毁时,我们往往需要释放其中 malloc() 的内存。那么在类被销毁时,自动调用的函数,就称为析构函数

#include <iostream>

class rect
{
public:
    int     x;
    int     y;
    int     area;

    //以下是两个构造函数
    rect()	//构造函数不需要返回值,也可以没有参数,创建 rect1,rect2,rect3 时会自动创建
    {
        x = 0;
        y = 0;
    }
    rect(int x_input, int y_input)	//重载构造函数,即同名的函数,参数不一样
    {
        x = x_input;
        y = y_input;
    }

    void area_printf()
    {
        area = x * y;
        std::cout << area << std::endl;
        return;
    }

    //以下是析构函数
    ~rect()
    {
        std::cout << "This Class Has Clean" << std::endl;
    }
};

void test_function()
{
    rect rect1;
    rect rect2(2, 4);
    rect rect3(11, 9);

    rect1.area_printf();
    rect2.area_printf();
    rect3.area_printf();

}//当函数退出时,创建的类会被销毁

int main(int argc, char* argv[])
{
    test_function();
    return 0;
}

在这里插入图片描述

标签:文件,入门,area,++,int,printf,之类,构造函数,函数
From: https://blog.csdn.net/2301_80899620/article/details/140782661

相关文章

  • 学完网络安全出去能做什么工作?(非常详细)零基础入门到精通,收藏这一篇就够了
    想要了解学完网络安全工程师就业班后,出去能做什么工作,这个时候会分甲方或是乙方,看个人更偏向哪个岗位。甲方指的是政府、海关、税务机构、高校及其他国有银行、商业银行,以及移动运营商(如中国移动、中国联通、中国电信)和一些大型央企国企,如电力、石油化工、烟草、轨道交通等......
  • C++里memset的使用
    在C++中使用memset函数涉及几个关键点,‌包括函数的正确调用方式、‌参数的理解以及注意事项。‌memset函数是C和C++语言标准库中的一个函数,‌用于将内存区域设置为特定的值。‌它的基本语法如下:‌void*memset(void*s,intc,size_tn);第一个参数是一个指向要被填充的内存......
  • Linux C++ 开发1 - 搭建C++开发环境
    1.安装GCC/GDB1.1.安装1.2.校验2.安装CMake2.1.安装2.2.校验3.安装IDE3.1.VSCode3.2.CLion1.安装GCC/GDB1.1.安装#更新软件源sudoaptupdate#通过以下命令安装编译器和调试器sudoaptinstallbuild-essentialgdbUbuntu默认情况下没有......
  • Stable diffusion小白入门第2课:文生图精讲
    大家好,这里是《Stablediffusion小白入门》系列的第2篇,在上一篇——Stablediffusion小白入门第1课:软件安装及介绍,我们成功安装了Stablediffusion软件,而今天,我们将深入了解Stablediffusion的文生图功能,让你也能生成满意的图片!AI工具SD整合包、各种模型插件、提示词、AI人......
  • C++11 中引入的auto关键字
    什么是auto关键字?    在C++11中,auto关键字被引入作为一种类型推断的机制(在编译期间执行),它允许编译器自动推断变量的类型。auto使用时需要注意的问题:1、auto与指针和引用结合使用:首先说一下auto和auto*为什么一样,因为在autoa=&x;这里auto类型推......
  • C++ void的用法
    C++void用法void的意思void的用法void的意思void在英语中是无效的意思,它是一种C++数据类型,而在C++中void既可以表示空类型,又可以指定不带参数的函数:空类型:void表示不包含任何成员的空类型,常用于函数返回类型(表示不返回值)和指向空类型的指针类型。无参数函数:void......
  • C++ - VS2019配置pthread线程库
    1.说明在VS里用MS编译器不能直接调用pthread库,需要先自行下载该库:http://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip解压后用得到的只有Pre-built.2文件夹下的文件。2.配置如下图分别配置三大项:包含目录-->...pthreads-w32-2-9-1-release\Pre-bu......
  • C++(常量成员函数)
    目录1.声明与定义2.常量成员函数的特点3.常量成员函数的使用4.关键字mutable5.总结在C++中,常量成员函数(constmemberfunction)是指在函数声明的尾部加上const关键字的成员函数。这种函数不能修改类的成员变量,也不能调用会修改类成员变量的其他成员函数。常量成员函数保......
  • Go并发编程入门
    本文由ChatMoney团队出品Go并发编程:Goroutines与Channels并发编程是Go语言的一个重要特点,它高效地利用现代硬件的多核和并行性来提升应用性能。本文将简介Go并发编程的基本概念,包括Goroutines和Channels。GoroutinesGoroutines是Go并发编程的基本单位,它们是轻......
  • springSecurity初入门
    引入依赖(引入后即可启动服务器,会自动进行页面拦截,未登录用户会跳转到默认的登陆页面,账号为user,密码在服务器启动时会在控制台输出:Usinggeneratedsecuritypassword:......)<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot......