C++ 基础

C++ 主页 C++ 概述 C++ 环境设置 C++ 基本语法 C++ 注释 C++ Hello World C++ 省略命名空间 C++ 标记 C++ 常量/字面量 C++ 关键字 C++ 标识符 C++ 数据类型 C++ 数字数据类型 C++ 字符数据类型 C++ 布尔数据类型 C++ 变量类型 C++ 变量作用域 C++ 多变量 C++ 基本输入/输出 C++ 修饰符类型 C++ 存储类 C++ 数字 C++ 枚举 C++ 枚举类 C++ 引用 C++ 日期和时间

C++ 运算符

C++ 运算符 C++ 算术运算符 C++ 关系运算符 C++ 逻辑运算符 C++ 位运算符 C++ 赋值运算符 C++ sizeof 运算符 C++ 条件运算符 C++ 逗号运算符 C++ 成员运算符 C++ 强制类型转换运算符 C++ 指针运算符 C++ 运算符优先级 C++ 一元运算符

C++ 控制语句

C++ 决策语句 C++ if 语句 C++ if else 语句 C++ 嵌套 if 语句 C++ switch 语句 C++ 嵌套 switch语句 C++ 循环类型 C++ while 循环 C++ for 循环 C++ do while 循环 C++ Foreach 循环 C++ 嵌套循环 C++ break 语句 C++ continue 语句 C++ goto 语句

C++ 字符串

C++ 字符串 C++ 循环遍历字符串 C++ 字符串长度 C++ 字符串连接 C++ 字符串比较

C++ 函数

C++ 函数 C++ 多函数参数 C++ 递归函数 C++ 返回值 C++ 函数重载 C++ 函数重写 C++ 默认参数

C++ 数组

C++ 数组 C++ 多维数组 C++ 指向数组的指针 C++ 将数组传递给函数 C++ 从函数返回数组

C++ 结构 &联合

C++ 结构 C++ 联合

C++ 指针

C++ 指针 C++ 解引用 C++ 修改指针

C++ 类和对象

C++ 面向对象 C++ 类 &对象 C++ 类成员函数 C++ 类访问修饰符 C++ 静态类成员 C++ 静态数据成员 C++ 静态成员函数 C++ 内联函数 C++ this 指针 C++ 友元函数 C++ 指向类的指针

C++ 构造函数

C++ 构造函数 &析构函数 C++ 默认构造函数 C++ 参数化构造函数 C++ 复制构造函数 C++ 构造函数重载 C++ 带默认参数的构造函数 C++ 委托构造函数 C++ 构造函数初始化列表 C++ 使用构造函数动态初始化

C++ 继承

C++ 继承 C++ 多重继承 C++ 多级继承

C++ 面向对象

C++ 重载 C++ 多态性 C++ 抽象 C++ 封装 C++ 接口 C++ 虚函数 C++ 纯虚函数与抽象类

C++ 文件处理

C++ 文件和流 C++ 文件读取

C++ 进阶

C++ 异常处理 C++ 动态内存 C++ 命名空间 C++ 模板 C++ 预处理器 C++ 信号处理 C++ 多线程 C++ Web 编程 C++ 套接字编程 C++ 并发 C++ 高级概念 C++ Lambda 表达式 C++ unordered_multiset

C++ 实用资源

C++ 问答 C++ 快速指南 C++ 速查表 C++ STL 教程 C++ 标准库 C++ 实用资源 C++ 讨论


C++ 问题与答案

面向对象编程系统。

类是反映实体属性和操作的蓝图。从技术角度来看,定义类就是设计用户定义的数据类型。

类的实例称为对象。

单继承、多继承、多重继承、分层继承和混合继承。

如果类成员是 protected,则可以在继承的类中访问它。但是,私有成员和受保护成员在类外部都是不可访问的。

将数据和作用于数据的函数绑定到一个实体(类)中的过程称为封装。

抽象是指隐藏内部实现,仅展示必要的细节。

继承是将现有类的属性获取到新类中的过程。现有类称为基类/父类,继承的类称为派生类/子类。

将变量声明为 volatile 会告知编译器该变量可以从外部更改。从而避免了编译器对变量引用的优化。

在函数定义前添加关键字 inline 前缀的函数被称为内联函数。与普通函数相比,内联函数的执行速度更快,因为编译器将内联函数视为宏。

存储类指定符号(例如变量或函数)的生命周期或作用域。

以下是 C++ 支持的存储类

auto、static、extern、register 和 mutable

可以使用可变存储类说明符声明常量类对象的成员变量来更改它。仅适用于类的非静态和非常量成员变量。

浅拷贝是将内存逐位从一个对象转储到另一个对象。深拷贝是将一个对象中的字段逐个复制到另一个对象。深层复制是通过复制构造函数和/或重载赋值运算符实现的。

没有函数体且赋值为零的虚函数称为纯虚函数。

至少包含一个纯虚函数的类称为抽象类。抽象类无法实例化。

引用变量是现有变量的别名。这意味着变量名和引用变量指向同一内存位置。因此,也可以使用引用变量来更新原始变量。

即使未创建相应类的对象,静态变量也存在。静态成员变量与为相应类创建的所有对象共享一块内存。静态成员变量可以通过类名本身来引用。

静态成员函数可以在类对象存在之前使用类名来调用,因为它已经存在。它只能访问类的静态成员。

wchar_t

点 (.) 和箭头 ( -> )

不可以,定义类/结构体只是类型定义,不会为其分配内存。

bool 是 C++ 语言中引入的新原始数据类型。

定义多个具有相同名称且参数列表不同的函数称为函数重载。

为类对象中现有的运算符定义一个新的任务称为运算符重载。

没有,它是 STL(标准模板库)中的一个类。

cin、cout、cerr 和 clog。

Private &受保护。

作用域解析运算符 (::)

析构函数是类的成员函数,其名称与类名相同,并以波浪号 (~) 为前缀。一旦对象失去其作用域,它将自动针对该对象执行。它不能重载,唯一的形式是无参数。

构造函数是类的成员函数,它与类名相同,并在创建相应类的对象时自动执行。

如果程序员没有提供构造函数,编译器会为每个类提供一个默认构造函数。程序员提供的无参数构造函数称为默认构造函数。在这种情况下,编译器不会提供构造函数。

new 运算符可以用于分配动态内存。

delete 运算符用于释放使用 new 运算符创建的动态内存。

是的,因为 C 是 C++ 的子集,所以我们也可以在 C++ 中使用 C 的所有函数。

不可以,我们需要使用 C 语言的 free() 函数。

一个函数不是类的成员函数,但仍然可以访问类的所有成员。为了实现这一点,我们需要在所需的类中声明它,并在关键字 friend 之后进行声明。

复制构造函数是接受同一类对象引用作为参数的构造函数。在创建对象时,只要使用同一类的另一个对象初始化该对象,就会自动调用复制构造函数。

C++ 支持异常处理。try、catch 和throw 是用于相同操作的关键字。

This 是编译器的指针变量,它始终保存当前活动对象的地址。

默认情况下,struct 的成员是公有的,而 class 的成员是私有的。

可以。

变量的作用域仅在块内有效。 C++ 中的变量也可以在块中的任何位置声明。

如果文件已存在,则在打开文件之前会截断其内容。

作用域解析运算符用于

  • 解析全局变量的作用域。
  • 如果函数在类外部定义,则将函数定义与类关联。

A命名空间是代码的逻辑划分,可以通过将标识符放在不同的命名空间下来解决标识符的名称冲突。

从命令行/控制台执行时发送给 main() 函数的参数/形参被称为命令行参数。所有发送的参数都只是字符串。

模板类是一种泛型类。关键字 template 可用于定义类模板。

带省略号的 catch 块如下所示


catch()
{
}

默认情况下,函数的每个局部变量都是自动变量 (auto)。在下面的函数中,变量 i 和 j 都是自动变量。


void f() 
{
   int i;
  
   auto int j;
}

注意 − 全局变量不能是自动变量。

静态局部变量在函数调用期间会保留其值,默认值为 0。以下函数如果被调用三次,将打印 1 2 3。


void f() 
{ 
   static int i; 
   
   ++i; 
   printf(%d ,i); 
}

如果全局变量是静态的,则其可见性仅限于同一源代码。

用于解析全局符号的作用域


#include <iostream>

using namespace std;	
main() {
   extern int i;
      
   cout<<i<<endl;
}
int i = 20;

数组的起始地址称为数组的基址。

如果一个变量使用频率最高,那么应该使用寄存器存储说明符声明它,这样编译器可能会为它分配一个 CPU 寄存器来存储,以加快变量的查找速度。

可以,但不能执行,因为执行需要 main() 函数的定义。

默认情况下,每个局部变量都是自动变量,存储在堆栈内存中

如果一个类包含至少一个其他类类型的成员变量,则称其为容器类。

C++ 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串字面量或符号。

预处理器是指示编译器在实际编译过程之前执行某些操作的指令。开始。

我们在执行程序时传递给 main() 函数的参数被称为命令行参数。这些参数始终是字符串,保存在函数的第二个参数(见下文的 args 部分)中,该参数是一个字符指针数组。第一个参数表示参数的数量(见下文的 count 部分),并由操作系统自动更新。


main( int count, char *args[]) {
}
  • 按值调用 − 我们仅将值作为参数传递给函数。如果我们不想使用形式参数修改实际参数,而只是使用实际参数,则选择这种方式。

  • 按地址调用 − 我们发送实际参数的地址而不是值。如果我们确实希望使用形式参数修改实际参数,则选择这种方式。

  • 按引用调用 − 实际参数通过 C++ 新的引用变量作为形式参数接收。如果我们确实希望用形式参数修改实际参数,则选择此选项。

错误,模运算符 (%) 的两个操作数不能是实数,这是无效的。

将选项 lm 用作 > g++ lm <file.cpp>

不可以,没有这样的规定。

Bjarne Stroustrup。

sizeof

我们可以将作用域解析运算符 (::) 应用于全局变量的作用域。

指针上唯一允许的两种操作是

  • 比较 ii) 加法/减法(不包括 void 指针)

函数调用自身被称为递归。

程序名称。

理想情况下,它是 32 个字符,并且取决于具体实现。

默认情况下,函数是按值调用的。

公共、私有和受保护

Delete[] 用于释放使用 new[] 分配的数组内存,而 delete 用于释放使用 new 分配的一块内存。

不一定,至少包含一个纯虚函数的类也是抽象类。

不合法,这会引发错误,因为编译器无法进行转换。

程序会突然退出。

不合法,异常可以被处理,而程序无法解决错误。

在基类和派生类中定义具有相同签名和名称的函数,其中基类函数是虚函数。

seekg()

seekp()

否,只有类成员变量决定相应类对象的大小。

我们可以创建一个空类,对象大小为 1。

C++ 定义的默认命名空间。

标准模板库

cout 是 ostream 类的对象。流 cout 默认连接到控制台输出设备。

cin 是 istream 类的对象。默认情况下,cin 流连接到控制台输入设备。

它用于指定所使用的命名空间。

箭头 (->) 运算符也可用于此目的

如果使用 < > 包含头文件那么编译器只会在内置包含路径中搜索特定的头文件。如果头文件包含在 中,则编译器首先在当前工作目录中搜索特定的头文件,如果未找到,则在内置包含路径中搜索。

S++,因为它内部是单条机器指令 (INC)。

在调用端发送给函数的参数称为实际参数,而在函数定义接收端,称为形式参数。

声明将类型与变量关联,而定义将值赋给变量。

转到。

不是,它包含无效的八进制数字。

它将用于取消定义现有的宏定义。

不可以。

虚拟析构函数确保对象资源的释放顺序与继承对象的构造顺序相反。

对象销毁的顺序与创建顺序相反。

通过在目标类中以关键字 friend 为前缀的类声明,类成员可以获得对其他类成员的访问权。