day42:C++ day2,C++对C的补充(引用、动态内存分配与回收、函数扩充以及结构体扩充)

这篇具有很好参考价值的文章主要介绍了day42:C++ day2,C++对C的补充(引用、动态内存分配与回收、函数扩充以及结构体扩充)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

面试题小结:

1、指针与引用的区别?

(1)指针指向的是变量的地址,而引用是指向变量本身;

(2)指针可以有多级指针,而引用只有一级引用;

(3)指针可以不初始化,但是引用必须初始化;

(4)指针可以改变指向,但是引用初始化后就不能更改对象;

(5)指针用const修饰时可以修饰指针指向和指向的内容,但引用只能修饰变量的值;

(6)没有引用数组,但是有数组引用;

(7)指针在分配时需要额外分配8bit空间,而引用不需要分配;

(8)指针在使用时需要解引用,而引用是直接使用。

2、malloc、free、new、delete区别

(1)malloc和free是以字节为单位向堆区申请空间,而new和delete是以数据类型为单位;

(2)malloc和free是库函数,而new和delete是关键字;

(3)malloc和free的返回值是void*类型的万能指针,而new和delete返回的是设置的数据类型;

(4)malloc申请时不能进行初始化,而new申请可以进行初始化;

(5)new申请空间时会调用构造函数,malloc不会

(6)delete释放空间时,会调用析构函数,free不会

3、C++中const的使用

const最核心的使用原理是保护;

(1)修饰常量:表示修饰的常量不能进行修改;

(2)修饰指针:可以修饰指针本身(指针指向)也可以修饰指向的内容;

(3)修饰函数:修饰函数的参数和返回值时,是为了保护传参和返回值,防止被修改;

(4)修饰成员变量时表示不能被访问和修改;

4、什么是回调函数?

回调函数通过函数指针来实现,通过传递函数地址,用函数指针来接受函数地址,再通过函数参数类型,来完成回调函数,在回调函数的使用中可以大大提高编程的效率,常接触到的回调函数有创建线程时构造的线程体,其本质也是回调函数。

5、函数重载的相关内容

函数重载的使用是为了达到一名多用的目的,但是其参数列表必须不同,函数名相同,且在同一个作用域下,函数重载和返回值没有关系。

6、谈谈对面向对象的特征

首先,面向对象有三大特征:封装、继承、多态(抽象),面向对象的概念就是将一个事物的所有行为和属性等万事万物都封装起来,我们称之为类,并在类中提供公共接口,用户可以通过公共接口来完成对该类实例化对象的操作。

作业:

1、

封装一个结构体,结构体中包含一个私有数组,用来存放学生的成绩,包含一个私有变量,用来记录学生个数,

提供一个公有成员函数,void setNum(int num)用于设置学生个数

提供一个公有成员函数:void input(),用来对所有学生的成绩进行输入工作

提供一个公有成员函数:void sort(),用来实现对存储的学生成绩进行降序排序

提供一个公有的成员函数:void show(),用于将所有学生的成绩展示出来

在主程序中,完成相关函数的调用

#include <iostream>

using namespace std;

struct Data{
private:
    double arr[50];
private:
    int num;
public:
    void setNum(int num)
    {
        this->num = num;
        /*
        cout<<"请输入学生个数"
        cin>>num;
        */
    }
public:
    void input()
    {
        for(int i=0;i<num;i++)
        {
            cout<<"请输入第"<<i+1<<"个学生的成绩:";
            cin>>arr[i];
        }
    }
public:
    void sort()
    {
        for(int i=1;i<num;i++)
        {
            for(int j=1;j<num;j++)
            {
                if(arr[j]>arr[j-1])
                {
                    double temp=arr[j];
                    arr[j]=arr[j-1];
                    arr[j-1]=temp;
                }
            }
        }
    }
public:
    void show()
    {
        cout<<"学生成绩从高到低依次为:";
        for(int i=0;i<num;i++)
        {
            if(0==i)
            {
                cout<<arr[i];
                continue;
            }
            cout<<"  "<<arr[i];
        }
        cout<<endl;
    }
};
int main()
{
    Data a;
    int num;
    cout<<"请输入学生个数:";
    cin >> num;
    a.setNum(num);
    a.input();
    a.sort();
    a.show();
    return 0;
}

2、思维导图:有道云笔记文章来源地址https://www.toymoban.com/news/detail-699759.html

到了这里,关于day42:C++ day2,C++对C的补充(引用、动态内存分配与回收、函数扩充以及结构体扩充)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Golang内存分配及垃圾回收

      为什么需要垃圾回收? 自动释放不需要的对象,让出存储器资源,无需程序员手动执行 Go V1.3之前是标记-清除算法 具体步骤 缺点:程序卡顿、扫描整个heap、数据清除会产生heap碎片 V1.3之后,做了简单的优化 V1.5之后,使用三色并发标记法 只要是新创建的对象,默认颜色都

    2024年02月13日
    浏览(44)
  • JVM 垃圾回收详解之内存分配和回收原则+死亡对象判断方法

    当需要排查各种内存溢出问题、当垃圾收集成为系统达到更高并发的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。 Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收

    2023年04月19日
    浏览(58)
  • 深入理解Java虚拟机——内存分配与回收策略

    在读这篇博客之前,你需要了解分代收集理论中,收集器应该将Java堆划分出不同的区域**,**然后将回收对象依据其年龄(年龄即对象熬过垃圾收集过程的次数)分配到不同的区域之中存储。 例如 appel式回收 ,HotSpot虚拟机中的新生代收集器都采用了appel式回收来设计新生代内

    2024年02月04日
    浏览(42)
  • 深入理解JVM——垃圾回收与内存分配机制详细讲解

    所谓垃圾回收,也就是要回收已经“死了”的对象。 那我们如何判断哪些对象“存活”,哪些已经“死去”呢? 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加一;当引用失效时,计数器就减1;任何时刻计数器为0的对象就是不可能再被使用的。 但是

    2024年02月12日
    浏览(44)
  • 《深入理解Java虚拟机》读书笔记:内存分配与回收策略

    Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。关于回收内存这一点,我们已经使用了大量篇幅去介绍虚拟机中的垃圾收集器体系以及运作原理,现在我们再一起来探讨一下给对象分配内存的那点事

    2024年02月13日
    浏览(40)
  • java面经03-虚拟机篇-jvm内存结构&垃圾回收、内存溢出&类加载、引用&悲观锁&HashTable、引用&finalize

    要求 掌握 JVM 内存结构划分 尤其要知道方法区、永久代、元空间的关系 结合一段 java 代码的执行理解内存划分 执行 javac 命令编译源代码为字节码 执行 java 命令 创建 JVM,调用类加载子系统加载 class,将类的信息存入 方法区 创建 main 线程,使用的内存区域是 JVM 虚拟机栈 ,

    2024年02月09日
    浏览(56)
  • 编写C语言程序,模拟实现首次/最佳/最坏适应算法的内存块分配和回收,要求每次分配和回收后显示出空闲分区和已分配分区的情况。假设初始状态下,可用的内存空间为640KB。(江西师范大学软件学院 操作系统)

    为了实现动态分区分配,通常将系统中的空闲分区链接成一个链。所谓顺序查找是指依次搜索空闲分区链上的空闲分区,去寻找一个大小能满足要求的分区。 --------计算机操作系统(第四版) 可变分区也称动态分区,在指作业装入内存时,从可用的内存中划出一块连续的区域

    2024年02月08日
    浏览(43)
  • Day 42 动态规划 4

    代码随想录 1. 思路 背包问题的主要特征为, 在有限制的情况下满足最优化 ,因此可以构造二维dp数组,一个维度记录成本,一个维度记录收益,一步步寻找最优解。 (1)dp数组以及下标含义 dp[i][j]代表0-i的物品, 在j的背包容量下,可以形成的最大价值 。注意,这里 i为序

    2024年01月16日
    浏览(31)
  • C++学习(day2)

    C语言风格的字符串依然支持,使用字符数组的形式存储字符串,字符串标志:‘\\0’ C++风格的字符串,本质上是string类的对象 使用要求:需要加头文件:#include 单个数据的初始化和赋值 方式 解释 方式1 string s2 = “ni hao”; 方式2 string s3(“shang hai”); 方式3 string s4{“zhangpeng

    2023年04月24日
    浏览(39)
  • Day 42算法记录| 动态规划 08

    单词就是物品,字符串s就是背包 1.dp[0]背包啥也不要用装,true。 2. for循环,顺序很重要,所以先背包再物品 如果求组合数就是外层for循环遍历物品,内层for遍历背包 。 如果求排列数就是外层for遍历背包,内层for循环遍历物品 。 3.递归: 要么装包或者不装 添加链接描述 把

    2024年02月15日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包