首页 > 编程语言 >C++ day07

C++ day07

时间:2024-09-26 21:18:47浏览次数:10  
标签:初始化 函数 引用 day07 C++ 内存 基类 指针

C++笔试题合集:

1、什么是虚函数?什么是纯虚函数?

        1>在类中定义函数时,在函数名前加上virtual关键字,该函数就是虚函数,虚函数可以保证在父子类中只有一个该函数。

        2>当虚函数头 = 0;时该函数就是纯虚函数,当类中的某些成员函数没有实现的意义,仅仅时该类中拥有的功能,又想要在子类将其重写后,可以使用父类的指针和引用调用该函数,此时就可以将该函数设置为纯虚函数。

2、基类为什么需要虚析构函数?

        1>如果基类的析构函数是虚的,则会先调用派生类的析构函数,再调用基类的析构函数,确保所有的资源都被清理干净,同时防止内存泄漏。   

        2>如果基类的析构函数是虚的,那么在删除一个指向派生类对象的基类指针时,程序将首先调用派生类的析构函数,然后再调用基类的析构函数,保证了在对象销毁时同样具有多态性。

3、如何初始化const和static数据成员?

        1>const数据成员不能在构造函数体内直接赋值(除非构造函数中有默认参数),所以通常在类的外部定义这些成员并进行初始化。可以在类外初始化,也可以通过构造函数初始化列表。

        2>static数据成员在类的所有实例之间共享,因此它必须在类外初始化,static数据成员可以通过类名直接访问,不需要创建类的实例。

4、指针和引用的区别?

        1>有空指针,但是没有空引用;

        2>引用必须初始化,但是指针可以不初始化;

        3>有多级指针,但是没有多级引用;

        4>引用的大小与引用的目标本身大小一致,而指针的大小是固定的8字节(64位);

        5>引用代表的是被引用目标本身,而指针代表的是指向目标的首地址;

        6>引用不占用内存空间使用的是引用目标的空间,而指针占用内存空间。

5、new和malloc的区别?

        1>new申请空间时可以给空间进行初始化,而malloc不可以;

        2>new申请对象空间时,会自动调用该对象所在类中的构造函数,而malloc不会;

        3>malloc申请的空间是void*类型,使用时需要根据具体的情况进行强转,而new申请空间时返回指针的类型与申请空间的类型有关。

6、内存泄漏是如何产生的?如何避免?

        内存泄漏的产生:

        1>动态分配的内存没有通过相应的 deletedelete[] 操作释放;

        2>分配了内存后,没有保存好指向这块内存的指针,导致无法访问或释放这块内存;

        3>当使用基类指针管理派生类对象时,如果没有使用虚析构函数,可能会导致派生类的部分内存没有被释放。

        如何避免:

        1>动态分配的内存使用完毕后要及时使用delete或delete[]释放;

        2>使用只能指针。

7、C++的内存分区?     

        1>栈区:由编译器自动分配和释放,存放函数的参数值、局部变量,随着函数的调用而分配,函数结束时自动释放。

        2>堆区:由程序员分配和释放,使用 new 和 delete 或者 malloc 和 free 进行操作。

        3>静态区:包含全局变量和静态局部变量。

        4>常量区:存储字符串等常量且不允许被修改。

        5>代码区:存储程序的机器码且不可写入更不可修改。

8、常用的数据结构有哪些?时间复杂度和空间复杂度如何使用?

        1>数组、链表、栈、队列、哈希表、树、图。

        2>时间复杂度和空间复杂度是用来评估算法效率的重要指标。

标签:初始化,函数,引用,day07,C++,内存,基类,指针
From: https://blog.csdn.net/jay__jay_/article/details/142575230

相关文章

  • 【C++】你对vector的了解又有多少呢?
    【C++】你对vector的了解又有多少呢?一.vector的介绍二.vector的使用1.vector的构造代码举例:2.vector空间增长问题resize机制:reserve扩容机制:3.vector增删查改代码举例一:代码举例二:一.vector的介绍vector是表示可变大小数组的序列容器。就像数组一样,vect......
  • C++ 原始字符串(raw string literal )R“(...)“
    C++11可以在代码里嵌入一段原始字符串,该原始字符串不作任何转义,所见即所得。这个特性对于编写代码时要输入多行字符串,或者含带有特殊字符的字符串提供了巨大方便。语法:     R"(...)"记忆点:1.不做任何转义 stringstr="aaa\nbbb\nccc\n"; cout<<str<<endl......
  • c++笔记
    类和对象类用于指定对象的形式,是一种用户自定义的数据类型,它是一种封装了数据和函数的组合。类中的数据称为成员变量,函数称为成员函数。类可以被看作是一种模板,可以用来创建具有相同属性和行为的多个对象。一、定义类类的定义需要使用关键字class,然后指定类的名称,类的......
  • C++—单例设计模式
    单例设计模式C++中的单例设计模式是一种常用的软件设计模式,其核心目的是确保一个类仅有一个实例,并提供一个全局访问点来获取这个实例。以下是对C++单例设计模式的详细解释:一、单例设计模式的定义单例模式(SingletonPattern)是一种创建型设计模式,它确保一个类只有一个实例,......
  • C++学习,信号处理
    C++信号处理,依赖于操作系统提供的API。信号处理主要用于响应外部事件,如中断信号(如SIGINT,SIGTERM等),这些信号可以由操作系统、其他程序或用户生成。在Unix-like系统(如Linux和macOS)中,信号处理可以通过signal函数或更灵活的sigaction函数来设置。在C++程序中直接使用这些函数是......
  • C++学习,# 和 ## 运算符
    C++中,# 和 ## 是两个特殊的预处理运算符,它们主要在宏定义中使用,用于字符串化和标记粘贴(tokenpasting)操作。 # 运算符:字符串化# 运算符用于将其后的宏参数转换为一个字符串常量。如果宏参数是一个宏标识符,则它会被转换成用双引号括起来的该标识符的字符串表示。这个操......
  • Effective C++学习
    导读声明式externintx;std::size_tnumDigits(intnum);classPerson;template<typenameT>classGraphNode;签名式std::size_t(int);//这个函数获得一个int,返回一个size_t定义式intx;std::size_tnumDigits(intnum){std::size_tdigitSoFar=......
  • C++ -函数重载-详解
    博客主页:【夜泉_ly】本文专栏:【C++】欢迎点赞......
  • 【C++掌中宝】类和对象(一):类的定义和实例化
    文章目录引言1.什么是类?1.1类的定义1.1.1类定义格式1.1.2访问限定符1.1.3类域1.2类在编程中的作用——抽象与封装2.类的基本组成2.1成员变量:类的属性(变量)2.2成员函数:类的行为(函数)2.3完整代码示例3.什么是对象?2.1实例化2.1.1实例化概念2.1.2对象大小(内......
  • 【C++掌中宝】从std的角度来进一步了解命名空间
    文章目录前言1.什么是命名空间(namespace)?2.\<iostream\>和\<iostream.h\>的区别3.C++命名空间的三种使用方式3.1直接指定标识符3.2使用using关键字3.3使用usingnamespacestd4.为什么避免使用usingnamespacestd5.命名空间冲突与解决方案6.命名空间的最......