当前位置: 首页 > news >正文

保险网站建设建设执业资格注册管理中心网站

保险网站建设,建设执业资格注册管理中心网站,自动优化网站建设咨询,湖南响应式网站推荐#x1f4da; 本文主要总结了一些常见的C面试题#xff0c;主要涉及到语法基础、STL标准库、内存相关、类相关和其他辅助技能#xff0c;掌握这些内容#xff0c;基本上就满足C的岗位技能#xff08;红色标记为重点内容#xff09;#xff0c;欢迎大家前来学习指正… 本文主要总结了一些常见的C面试题主要涉及到语法基础、STL标准库、内存相关、类相关和其他辅助技能掌握这些内容基本上就满足C的岗位技能红色标记为重点内容欢迎大家前来学习指正会不定期去更新面试内容。 Hi~欢迎来到碧波空间平时喜欢用博客记录学习的点滴欢迎大家前来指正欢迎欢迎~~ ✨✨ 主页碧波  专栏C 系列文章 目录 一、C 语法基础 谈谈变量的使用和生命周期声明和初始化 谈谈C的命名空间的作用 include 和 的区别 指针是什么 什么是指针数组和数组指针 引用是什么 指针和引用的区别 什么是函数指针和指针函数以及区别 什么是常量指针和指针常量以及区别 智能指针的本质是什么以及实现原理 weak_ptr 是否有计数方式在那分配空间 类型强制转换有哪几种 函数参数传递时指针、引用以及值传递有什么区别 进程间的通信方式有那些 线程间的通信方式有那些 简单谈谈对线程的理解线程间共享资源时该怎么处理 常用关键字含义及其使用 const 可以修饰那些内容 class 和 struct 的区别有了class 为啥仍还保留 struct? 二、标准库 什么是STL 数组和vector的区别 list 和 vector 的主要区别是什么 在什么情况下使用 list 而不是 vector set 的底层数据结构是什么 set 和 multiset 有什么不同 map 和 unordered_map 的主要区别是什么 三、内存 RAII是什么 使用RAII的原因以及使用方法 new 和 malloc 的区别delete 和 free 的区别 C的内存框架分布情况 堆和栈的区别 什么是内存对齐内存对齐有什么好处 什么是内存泄漏写代码时应该怎么防止内存泄漏。 说说什么是深拷贝和浅拷贝 四、类相关 讲讲C的三大特性封装、继承、多态 多态是怎么实现的  什么是虚函数和纯虚函数以及区别 虚函数是怎么实现的虚函数在那个阶段生成 构造函数和析构函数的作用 构造函数和析构函数那个可以被声明为虚函数为什么 构造函数和析构函数那个可以被重载为什么 谈谈什么是重载、重写、隐藏 this 指针为什么会存在this指针 五、其他必备 什么是git? 以及git常用命令 什么是svn? git 和 svn的区别 Linux 系统下常用的命令会那些举例 一、C 语法基础 谈谈变量的使用和生命周期声明和初始化 全局变量在程序的任何地方都能访问到的变量它们通常在整个程序执行期间都是有效的。 局部变量定义在函数或者代码块内部的变量它们只能在声明它们的函数或代码块内部访问 静态变量一般是在变量前加static 进行声明。 如下表格是各变量之前的差异点熟练掌握每种变量的属性就可以正确使用变量。 各变量间的区别全局变量局部变量静态全局静态局部声明方式在函数外部声明通常在文件的顶部或者在函数定义之外在函数或代码块的开始部分声明在变量声明时加上 static 关键字在变量声明时加上 static 关键字代码示例 // 全局变量声明并初始化 int globalVar 10; void func() { // 局部变量声明并初始化 int localVar 20; } // 静态全局变量声明并初始化 static int globalVar 10; void func() { // 静态局部变量声明并初始化 static int localVar 20; } 初始化在声明时初始化建议在声明时初始化避免未知错误在声明时或者在第一次使用之前初始化在声明时或者在第一次使用之前初始化内存存储位置存储在常量区静态存储区存储在栈区存储在常量区静态存储区存储在常量区静态存储区作用域整个文件都可访问函数内部整个文件都可访问函数内部生命周期全局生命周期会一直存在到程序结束函数被调用期间全局生命周期具有全局生命周期但作用域仍然受限于其声明的函数或代码块保持其值在函数调用之间持久化 谈谈C的命名空间的作用 命名空间 避免命名冲突 可以帮助避免不同部分的代码中出现相同的名称从而防止命名冲突。 组织代码 可以将相关的函数、类等封装在一起提高代码的组织性和可读性。 模块化开发 可以将代码划分为不同的模块使得代码更易于维护和扩展。 命名空间使用 namespace MyNamespace {int x;void func(); } 标准命名空间 // 通常需要加上 std:: 前缀std::cout Hello, world! endl;// 或者使用 using namespace std;using namespace std; cout Hello, world! endl; include 和 的区别 #include 文件名 是包含标准库头文件的方式编译器会按照标准路径顺序搜索。 #include 文件名 是包含用户自定义或者项目内部头文件的方式优先在当前目录查找然后才是按照标准路径顺序搜索。 指针是什么 指针是一个 用来存储变量地址 的特殊数据类型。简单来说指针变量存储的是内存地址而不是常规的值。通过指针我们可以直接访问和操作内存中的数据而不必知道实际存储的值是什么。 可以使用 解引用操作符 * 来访问指针所指向的变量使用地址运算符 来获取变量的地址。 什么是指针数组和数组指针 指针数组是一个数组其中的每个元素都是指针。这些指针可以指向不同的内存地址通常用于存储一组相同类型的指针。 // ptrArray 是一个包含 5 个元素的数组 // 每个元素都是 int* 类型的指针可以分别指向不同的整数 int *ptrArray[5];数组指针是一个指针它指向数组的首地址。它本身是一个指针但指向的内容是一个数组对象。 // arrPtr 是一个指针指向一个包含 5 个整数的数组 int (*arrPtr)[5];指针数组常用于需要动态管理一组指针的场景而数组指针则用于处理数组的整体特别是在函数参数传递和多维数组的处理中比较常见。 引用是什么 引用提供了一个变量的别名。它使用  符号来定义。 // ref 是 num 的引用即 ref 和 num 引用同一个内存位置的整数值int num 10; int ref num; // ref 是 num 的引用引用必须在定义时初始化并且一旦初始化后它就不能再绑定到其他变量。 应用场景 引用可以用于函数参数允许在函数内部直接修改传递的变量而不是复制一份值。 指针和引用的区别 引用不能指向空值null而指针可以。 引用在使用时不需要解引用操作不需要 * 符号而指针需要。 引用在定义时必须初始化而指针可以在后续指向不同的对象。 什么是函数指针和指针函数以及区别 函数指针 是指 指向一个函数的指针变量。它可以指向一个特定类型和签名参数类型和返回类型的函数。函数指针的声明形式类似于指向其他类型的指针但其类型是指向函数的指针类型。 // 声明一个函数指针类型 typedef void (*FuncPtr)(int); // FuncPtr 是一个指向返回类型为 void参数为 int 的函数指针类型// 定义一个函数 void myFunction(int x) {// 函数体 }int main() {// 声明一个函数指针变量并初始化FuncPtr ptr myFunction;// 通过函数指针调用函数ptr(10); // 相当于调用 myFunction(10);return 0; }指针函数 指的是 返回类型 为 指向函数的指针 的函数。换句话说指针函数是一个返回类型为函数指针的函数。 // 声明一个指针函数 int (*funcPtr)(int, int); // funcPtr 是一个函数返回类型为 int*参数为两个 int// 定义一个函数 int add(int a, int b) {return a b; }// 另一个函数返回一个函数指针 int (*getAddFunctionPointer())(int, int) {return add; }int main() {// 获取 add 函数的函数指针funcPtr getAddFunctionPointer();// 通过函数指针调用函数int result funcPtr(3, 4); // 相当于调用 add(3, 4)result 等于 7return 0; }区别 函数指针是指指向函数的指针变量而指针函数是一个返回类型为函数指针的函数。 函数指针在声明时需要指定其指向的函数的签名参数类型和返回类型而指针函数的返回类型是一个函数指针类型。 函数指针直接指向一个已存在的函数可以通过该指针调用该函数而指针函数返回一个函数指针需要通过该函数指针再调用相应的函数。 什么是常量指针和指针常量以及区别 常量指针 是指一旦指向了某个对象就无法再指向其他对象的指针。 int x 10; int* const ptr x; // ptr 是一个常量指针指向 int 类型的对象// 无法再修改 ptr 指向的对象但可以修改对象本身的值 *ptr 20; // 合法修改了 x 的值为 20// 以下操作不合法因为 ptr 是常量指针不能改变指向 // ptr y; // 错误无法改变 ptr 的指向指针常量是指指向常量对象的指针一旦指向了某个对象不能通过该指针修改所指向对象的值。 int x 10; const int* ptr x; // ptr 是一个指向常量 int 的指针// 以下操作合法可以修改 ptr 所指向对象的值 x 20; // 修改了 x 的值为 20// 以下操作不合法因为 ptr 所指向的对象是常量不能修改其值 // *ptr 30; // 错误不能通过 ptr 修改其指向的对象的值// 以下操作合法因为 ptr 本身不是常量可以改变其指向 int y 50; ptr y; // 合法修改了 ptr 的指向为变量 y// 另一种写法 * 解引用也是取值。int const * p; 区别 常量指针 强调指针本身是常量指向对象的值可以改变 指针常量 强调指针所指向的对象是常量指针的指向可以改变 简单记忆 距const 修饰右边最近的值是常量 不能被修改。 智能指针的本质是什么以及实现原理 智能指针是一种用于管理动态分配内存和自动释放资源的工具其本质是利用了 RAII资源获取即初始化的设计模式。即在对象初始化的时候获取资源比如动态分配的内存在对象析构的时候自动释放资源。 它提供了一个封装了指针的对象通过其析构函数来确保在对象生命周期结束时所管理的资源能够被正确释放避免内存泄漏和资源泄漏。 实现原理 智能指针实现是引入计数引用机制。智能指针对象本身持有一个指向动态分配资源的指针并维护一个引用计数。每当有一个新的智能指针指向同一块内存时引用计数增加当智能指针超出作用域或被显式销毁时引用计数减少。当引用计数为零时智能指针负责释放其管理的资源。 常见的智能指针类型 std::shared_ptr允许多个指针共享同一块资源通过引用计数来管理资源的生命周期适用于多个所有者的情况。 std::unique_ptr独占所指向的对象保证在任何时刻只有一个指针可以指向该对象移动语义保证资源的所有权可以传递但不共享。 std::weak_ptr用于协助 std::shared_ptr不会增加引用计数避免循环引用问题通常用于解决 shared_ptr 的环状引用问题。 智能指针通过结合 RAII 设计模式和引用计数技术提供了一种高效、安全、方便的动态内存管理机制是现代 C 开发中推荐使用的重要工具之一。 weak_ptr 是否有计数方式在那分配空间 std::weak_ptr 是一种观测型智能指针用于解决 std::shared_ptr 的循环引用问题它本身并不进行内存空间分配或引用计数而是依赖于 std::shared_ptr 来管理资源的生命周期。 std::weak_ptr 可以通过 std::lock() 成员函数获取一个 std::shared_ptr。 调用 std::lock() 成员函数可以获取一个 std::shared_ptr 对象该对象指向 std::weak_ptr 所观测的对象如果它仍然存在。 如果 std::weak_ptr 过期即其管理的对象已经被释放std::lock() 返回一个空的 std::shared_ptr。 #include iostream #include memoryint main() {std::shared_ptrint shared std::make_sharedint(42);std::weak_ptrint weak shared;// 使用 std::lock() 获取 std::shared_ptrstd::shared_ptrint locked weak.lock();if (locked) {// 如果成功获取到 std::shared_ptr则可以安全地使用它std::cout Value pointed by shared_ptr: *locked std::endl;} else {std::cout The shared_ptr is no longer available. std::endl;}// 在此之后shared_ptr 可能会超出作用域对象被销毁return 0; }类型强制转换有哪几种 有四种类型转换方式它们分别是 静态转换static_cast 常量转换const_cast 动态转换dynamic_cast 重新解释转换reinterpret_cast 函数参数传递时指针、引用以及值传递有什么区别 参数传递区别 值传递复制实参的值给形参函数内部操作的是副本不影响原始值。 引用传递形参是原始实参的别名函数内部操作影响原始值。 指针传递形参是原始实参的地址函数内部通过解引用操作影响原始值。 进程间的通信方式有那些 各种通信方式的详细介绍参加 线程进程以及多线程多进程  管道 命名管道 消息队列 共享内存 信号量 套接字 线程间的通信方式有那些 各种通信方式的详细介绍参加 线程进程以及多线程多进程  共享内存 互斥锁 条件变量 简单谈谈对线程的理解线程间共享资源时该怎么处理 线程的详细介绍参加 线程进程以及多线程多进程  线程Thread是操作系统调度的基本单位是进程内的一条执行路径每个进程至少包含一个线程。 线程间共享资源时需要注意数据的一致性和并发访问的安全性避免数据竞争和不可预料的结果。一般会采用 互斥锁 来避免多线程访问导致的资源调用错误。 常用关键字含义及其使用 static关键字在不同上下文中有不同含义主要用于 静态变量属于类或函数的静态存储区域生命周期延续到程序结束。 静态函数属于类的静态成员函数与类的实例无关可以直接通过类名访问。 const 用来声明常量。 常量变量一旦初始化就不能修改的变量。 常量成员函数在成员函数声明或定义中的 const 关键字表示该函数不会修改对象的状态。 sizeof: 是一个操作符用于计算数据类型或变量的字节大小。 sizeof(type)返回类型或变量 type 所占的字节数。 例如sizeof(int) 返回 int 类型的字节数在大多数系统中是4个字节。 final用于指示某个类、虚函数或者虚继承在派生时不可被继承或重写。 类final class MyClass final { ... };表示该类不能被继承。 虚函数virtual void myFunc() final;表示该虚函数在子类中不能被重写。 override是C11引入的关键字用于 显式指示函数 是在派生类中覆盖了基类中的虚函数。 在派生类中重写基类的虚函数时可以使用 override 关键字以确保正确性和可读性。 virtual: 用于声明虚函数即在基类中声明的函数可以在派生类中被重写override 在基类中声明虚函数virtual void foo(); 派生类中可以选择重写基类的虚函数void foo() override; 虚函数支持动态绑定即在运行时根据对象的实际类型决定调用哪个版本的函数。 volatile 用来声明一个变量是易变的可能会被意外修改通常用于多线程或者硬件相关的编程。 如volatile int sensorValue;告诉编译器不要对 sensorValue 进行优化因为它可能会在程序控制之外被改变。 explicit用来声明构造函数为显式构造函数防止隐式类型转换。 例如explicit MyClass(int value);禁止编译器根据上下文进行隐式转换必须显式调用构造函数。 inline声明可以用于 函数定义 或者 成员函数 定义建议编译器将 函数的代码插入到每个调用点处而不是通过函数调用的方式进行调用。 如inline int add(int a, int b) { return a b; } extern C 的作用 用于告诉编译器按照C语言的方式进行链接主要用于解决C代码和C代码混合编译的问题。 define 和 typedef 的区别 define: 用于定义宏预处理阶段替换源代码中的标识符 如#define PI 3.14159 typedef : 用于给数据类型取别名。后续可以直接使用别名进行声明变量。 如typedef unsigned int UINT;    UINT num;   // 等价于unsigned int num。 const 可以修饰那些内容 变量、指针和引用、函数、类对象或类指针、函数返回值。 class 和 struct 的区别有了class 为啥仍还保留 struct? class 和 struct 用来定义 类 和 结构体主要区别在于默认的访问权限不同class 默认私有struct 默认公有 它们的区别主要体现在 成员默认的访问权限 和 继承方式 上 在 class 中默认的成员访问权限是 private在 struct 中默认的成员访问权限是 public 当没有显式指定继承方式时class 默认是 private 继承而 struct 默认是 public 继承。 虽然 class 和 struct 在语法上有一些细微差别但其实它们提供了类似的功能。保留 struct 主要是为了提供语法上的灵活性和向后兼容性。 二、标准库 什么是STL STL 是 C 标准模板库的缩写。它是 C 标准库的一部分提供了一组通用的模板类和函数实现了常用的数据结构和算法以及一些函数对象和迭代器概念使得 C 程序员可以更加高效地进行编程。 容器 如 vector动态数组、deque双端队列、list双向链表、set集合、map映射等这些容器提供了高效的数据存储和访问方式各自适用于不同的需求和使用场景。 算法 如排序、搜索、合并等这些算法独立于任何特定的容器类型可以利用这些算法直接对容器进行操作。 迭代器 提供了一种统一的方式来遍历容器中的元素。 函数对象 即重载了函数调用操作符 () 的对象。比如比较、排序等。 适配器 用于修改容器的接口或行为使其能够满足特定的需求。 数组和vector的区别 大小数组的大小在创建时是固定的而vector的大小是动态可变的。 内存分配数组的内存分配在栈上静态数组或堆上动态数组而vector的内存总是动态分配的通常在堆上。 功能vector提供了许多内置的操作如动态扩展、插入和删除等而数组只能直接访问元素不支持动态调整大小。 性能vector在需要扩展时可能会重新分配内存而数组的内存分配则不会改变。 list 和 vector 的主要区别是什么 存储方式 list 是一个双向链表而 vector 是一个动态数组。 访问时间 list 不支持常数时间的随机访问vector 支持常数时间的随机访问。 插入和删除 在 list 中在任意位置插入或删除元素。而在 vector 中不太适合在中间插入或删除元素。 在什么情况下使用 list 而不是 vector 当你需要在容器的中间频繁插入和删除元素而不是在末尾插入或删除时list 更适合。 当你不需要随机访问元素而是需要频繁进行插入和删除操作时list 是更好的选择因为它的这些操作在常数时间内完成。 set 的底层数据结构是什么 set 通常使用红黑树或其他自平衡的二叉搜索树实现。它确保所有元素是唯一的并且保持排序状态因此插入、删除和查找操作的时间复杂度是对数时间 (O(log n))。 set 和 multiset 有什么不同 set 中的元素是唯一的不能有重复的元素。 multiset 允许有重复的元素。 map 和 unordered_map 的主要区别是什么 底层数据结构 map 通常使用红黑树或其他自平衡的二叉搜索树实现而 unordered_map 使用哈希表实现。 访问时间 map 提供对数时间 (O(log n)) 的查找、插入和删除操作保持元素的排序。unordered_map 提供平均常数时间 (O(1)) 的查找、插入和删除操作但不保持元素的排序。 排序 map 中的元素是按照键的顺序排序的而 unordered_map 中的元素没有特定的顺序。 三、内存 RAII是什么 RAII 的核心思想是资源的获取如内存、文件句柄、网络连接等与对象的初始化绑定在一起。具体来说资源在对象的构造函数中获取并在对象的析构函数中释放。 使用RAII的原因以及使用方法 使用 RAII 的原因 自动管理资源利用对象的生命周期自动管理资源避免忘记释放资源。 异常安全即使发生异常RAII 也能确保资源被正确释放防止资源泄漏。 代码简洁通过封装资源管理减少代码重复和复杂性。 使用方法 定义资源管理类创建一个类负责资源的分配和释放。 在构造函数中分配资源例如分配内存、打开文件等。 在析构函数中释放资源确保资源在对象生命周期结束时得到释放。 new 和 malloc 的区别delete 和 free 的区别 new是 C 操作符用于动态分配内存并调用构造函数。它会返回指向新分配内存的指针并且可以用 delete 释放内存。new 会调用对象的构造函数初始化对象。 malloc是 C 标准库函数用于动态分配内存但不调用构造函数。它返回一个 void* 指针需要强制转换为所需类型的指针。使用 malloc 分配的内存需要用 free 释放。 delete用于释放 new 分配的内存并调用析构函数。对于数组使用 delete[]。 free用于释放 malloc 分配的内存。free 不会调用析构函数。 int* p new int(10); // 使用 new delete p; // 使用 deleteint* q (int*)malloc(sizeof(int)); // 使用 malloc free(q); // 使用 freeC的内存框架分布情况 C 的内存框架主要包括以下几个区域 栈Stack用于存储局部变量和函数调用信息。栈内存分配速度快但空间有限。 堆Heap用于动态分配内存。程序员可以控制分配和释放内存但需要显式管理。内存的生命周期由程序员控制。 静态存储区Static Storage Area用于存储静态变量和全局变量。这些变量在程序运行期间一直存在。 常量区Constant Data Area用于存储常量数据如字符串常量。 堆和栈的区别 栈堆分配方式自动分配和释放手动分配和释放使用 new/malloc 和 delete/free。生命周期函数调用时分配函数返回时释放。由程序员控制。大小通常较小受限于栈大小。通常较大受限于系统可用内存。速度较快。较慢需要管理和合并空闲块。用途局部变量、函数调用信息。动态内存分配。 什么是内存对齐内存对齐有什么好处 内存对齐 是将数据结构的内存地址按某个特定的对齐边界通常是数据类型的大小进行排列。对齐可以提高内存访问效率因为许多处理器在对齐的数据上访问更快。 好处 提高性能对齐的数据结构能更有效地利用缓存和减少内存访问时间。 防止错误某些硬件架构要求数据必须对齐否则会引发硬件异常或性能下降。 什么是内存泄漏写代码时应该怎么防止内存泄漏。 内存泄漏 是指程序在动态分配内存后没有释放这些内存导致系统资源浪费并最终可能导致程序崩溃或变慢。 防止内存泄漏的方法 使用 RAII通过对象的生命周期自动管理资源。 智能指针使用 std::unique_ptr 和 std::shared_ptr 管理动态内存避免手动释放内存。 内存分析工具使用工具如 Valgrind、AddressSanitizer 等检测和分析内存泄漏。 良好的编码实践确保每个 new 都有对应的 delete每个 malloc 都有对应的 free。 说说什么是深拷贝和浅拷贝 浅拷贝 定义复制对象时只复制对象的指针值而不复制指针指向的内容。结果是原始对象和拷贝对象共享相同的资源。 问题修改一个对象的资源会影响到另一个对象可能导致资源冲突和错误。 深拷贝 定义复制对象时创建对象指针指向的资源的完整副本。这样原始对象和拷贝对象各自拥有自己的资源。 好处避免共享资源带来的问题保证对象的独立性。 四、类相关 讲讲C的三大特性封装、继承、多态 封装将数据成员变量和对数据的操作成员函数捆绑在一起并对外部隐藏数据的具体实现。 继承通过继承子类可以继承父类的属性和行为从而实现代码的重用和扩展。 多态允许不同的对象以相同的接口进行操作即同一操作可以作用于不同的对象上表现出不同的行为。 多态是怎么实现的  多态的实现主要依赖于虚函数和动态绑定。多态允许程序在运行时决定调用哪个具体的函数实现。 运行时多态通过使用虚函数实现允许基类指针或引用调用派生类中的重写函数。这是通过虚函数表vtable和虚指针vptr机制实现的。 什么是虚函数和纯虚函数以及区别 虚函数 定义在基类中声明为 virtual 的成员函数允许派生类重写override该函数。虚函数实现运行时多态。 作用通过基类指针或引用调用虚函数时实际调用的是派生类中的重写函数。 纯虚函数 定义在基类中声明为 virtual 并且等于 0 的虚函数例如 virtual void func() 0;。 作用定义接口要求所有派生类必须实现纯虚函数。使得基类成为抽象类不能实例化。 虚函数是怎么实现的虚函数在那个阶段生成 虚函数表vtable每个类如果包含虚函数会有一个虚函数表它是一个指向虚函数实现的指针数组。每个对象会有一个指向虚函数表的指针vptr。 动态绑定通过 vptr 指针运行时可以查找虚函数表中的具体函数地址决定调用哪个函数实现。 生成阶段 编译阶段编译器生成虚函数表和虚指针。虚函数表在类定义时生成虚指针在对象实例化时设置。 构造函数和析构函数的作用 构造函数 作用在创建对象时初始化对象的状态。构造函数可以用于分配资源、初始化数据成员等。 特性构造函数与类名相同无返回值可以被重载。 析构函数 作用在对象生命周期结束时清理对象的资源。析构函数负责释放构造函数分配的资源如内存、文件句柄等。 特性析构函数的名字前加 ~无返回值不能被重载。 构造函数和析构函数那个可以被声明为虚函数为什么 析构函数可以被声明为虚函数如果基类的析构函数是虚函数确保派生类的析构函数在基类指针或引用被销毁时正确调用。防止资源泄漏和不完全析构。 构造函数不能被声明为虚函数构造函数在对象创建时调用此时对象还未完全构造无法设置虚函数表因此构造函数不能是虚函数。 构造函数和析构函数那个可以被重载为什么 析构函数不可以被重载每个类只能有一个析构函数负责对象生命周期结束时的清理操作。如果允许重载会导致析构时不确定性。 构造函数可以被重载允许创建对象时通过不同的参数进行初始化。通过重载构造函数可以提供多种初始化方式。 谈谈什么是重载、重写、隐藏 重载同一作用域内多个函数名相同但参数列表不同。 覆盖派生类重写基类的虚函数提供特定实现。 重定义派生类中定义了与基类同名但参数列表不同的函数导致基类函数不可见。 this 指针为什么会存在this指针 定义this 指针是指向当前对象的指针。在类的成员函数内部this 指针指向调用该函数的对象。 访问对象成员允许成员函数访问对象的属性和其他成员函数。 区分成员变量和参数在成员函数中this 指针可以用来区分同名的成员变量和函数参数。 实现链式调用可以返回 *this 实现链式调用。 五、其他必备 什么是git? 以及git常用命令 Git 是一个分布式版本控制系统用于跟踪文件的更改特别是源代码。它允许多人协作开发通过分支和合并功能管理项目的不同版本和特性。 git常用命令: git clone [url]克隆远程仓库到本地。git add [file]将文件添加到暂存区。git commit -m message提交更改到本地仓库-m 用于添加提交信息。git status查看工作目录和暂存区的状态。git diff查看文件的更改内容。git remote add [name] [url]添加远程仓库。git fetch [remote]从远程仓库获取最新的更改但不合并。git pull从远程仓库获取并合并更改。git push将本地提交推送到远程仓库。git log查看提交历史。git revert [commit]撤销指定提交但保留历史记录。git reset [commit]重置当前分支到指定提交。 什么是svn? git 和 svn的区别 SVN 是一个集中式版本控制系统用于跟踪文件的更改和管理版本。与 Git 不同SVN 采用集中式存储模式所有版本历史都存储在中央服务器上。 git 一般用于存放代码svn一般用于存放文档等。 Linux 系统下常用的命令会那些举例 ls列出目录内容。cd [dir]切换目录。pwd显示当前工作目录。cp [source] [destination]复制文件或目录。mv [source] [destination]移动文件或目录。rm [file]删除文件rm -r [dir] 删除目录及其内容。cat [file]显示文件内容。vim [file]使用 Vim 编辑器编辑文件。chmod [permissions] [file]改变文件权限。chown [owner]:[group] [file]改变文件所有者和组。ps显示当前进程。top实时显示系统进程和资源使用情况。df -h显示文件系统的磁盘使用情况。du -sh [dir]显示目录的大小。kill [pid]结束进程pid 是进程ID。ping [host]测试网络连接。ifconfig 或 ip a显示网络接口信息。netstat显示网络状态和端口使用情况。
http://www.w-s-a.com/news/117203/

相关文章:

  • 一六八互联网站建设怎么做套版网站
  • wordpress 书站建筑公司简介范文大全
  • 建设官方网站多少鲜花网站建设的主要工作流程
  • 卖主机网站轻量wordpress主题
  • 网站建设规划书结构制作一个自己的网站
  • 外贸网站商城建设做网站和推广
  • 网站建设微信群免费简约ppt模板
  • 哈尔滨网站设计公司哪家更好shopify和wordpress
  • 岚县网站建设网站建设中效果
  • 网站建设软文推广网站建设分金手指排名十四
  • 网站建设要什么知识广州注册公司地址怎么解决
  • 自己可以做开奖网站吗wordpress和hexo
  • 成都网站关键词优化wordpress价格
  • 网站开发后端站建设 app开发网站
  • 毕业设计做网站好的想法开发网站代码量
  • 西宁网站建设排名wordpress的站点地址如何配置
  • 医院网站建设 价格app和网站开发的成本
  • 常见的网站开发工具山东建设厅官方网站李兴军
  • 二级院系网站建设情况做网站域名是什么意思
  • 网站开发双语辽宁省建设厅网站怎样下载表格
  • 网站后台密码怎么修改百度查重免费入口
  • 衡阳网站页面设计公司绍兴网站设计
  • 青岛手机建站多少钱做图表的网站 免费
  • 如何去建立和设计一个公司网站开封建设教育协会网站
  • 南充市住房和城乡建设局考试网站wordpress 下载模板站
  • 有没有单纯做旅游攻略的网站保定建站方案
  • 2017网站建设报价方案2022年企业所得税税率表一览
  • 可以做婚礼视频的网站有哪些工程公司管理制度
  • 做农产品网站需要做的准备中文手机网站设计案例
  • 福州做网站软件seo搜索优化专员招聘