C++基本知识点集锦(2022秋招)
(1)构造函数是一种特殊的类成员函数,是当创建一个类的对象时,它被调用来对类的数据成员进行初始化和分配内存。(构造函数的命名必须和类名完全相同)
(2)C++的空类,编译器会加入哪些默认的成员函数:
·默认构造函数和拷贝构造函数
·析构函数
·赋值函数(赋值运算符)
·取值函数
**即使程序没定义任何成员,编译器也会插入以上的函数!
注意:构造函数可以被重载,可以多个,可以带参数;
析构函数只有一个,不能被重载,不带参数
(3)拷贝构造函数是C++独有的,它是一种特殊的构造函数,用基于同一类的一个对象构造和初始化另一个对象。
当没有重载拷贝构造函数时,通过默认拷贝构造函数来创建一个对象
A a;
A b(a);
A b=a; 都是拷贝构造函数来创建对象b
强调:这里b对象是不存在的,是用a 对象来构造和初始化b的!!
(4)拷贝构造函数重载声明如下:
A (const A&other)
class A
{ int m_i A(const A& other):m_i(other.m_i)
{ Cout<<”拷贝构造函数”<<endl;
}
}
(5)当一个类的对象向该类的另一个对象赋值时,就会用到该类的赋值函数。
当没有重载赋值函数(赋值运算符)时,通过默认赋值函数来进行赋值操作
A a;
A b;
b=a;
强调:这里a,b对象是已经存在的,是用a 对象来赋值给b的!!
赋值运算的重载声明如下:
A& operator = (const A& other)
class A;
A a;
A b=a; //调用拷贝构造函数(b不存在)
A c(a) ; //调用拷贝构造函数 /****/ class A;
A a;
A b;
b = a ; //调用赋值函数(b存在)
a.对象不存在,且没用别的对象来初始化,就是调用了构造函数;
b.对象不存在,且用别的对象来初始化,就是拷贝构造函数(上面说了三种用它的情况!)
c.对象存在,用别的对象来给它赋值,就是赋值函数。
例子:
#include <iostream>
using namespace std;
class Model
{private:int val;public:Model(int n = 0):val(n){} //构造函数Model(const Model &obj) //拷贝构造函数{ val = 2*obj.val; }Model &operator=(const Model &obj) //赋值函数{ val = 4*obj.val; return *this; }void print(){cout << val << endl;}
};int main( )
{Model obj1(10), obj2 = obj1, obj3; //obj2 = obj1;为拷贝构造函数obj2不存在obj3 = obj1; //obj3 = obj1;为赋值函数,obj3存在obj2.print();obj3.print();return 0;
}
输出为:20 40
(6)友元函数
#include<iostream>
using namespace std;
class P
{
public:P( int x, int y ) { X = x; Y = y; }void Print() { cout << "P(" << X << ", " << Y << ")" << endl;}friend P operator+( P & pt, int n );
private:int X, Y;
};
//友元函数,需要在构造函数里面进行声明,填空处和上面定义需要一致;
_____P____ operator+( P & pt, int n )
{P T= pt;T.X += n;T.Y += n;return T;
}
int main()
{P pt( 10, 10 );pt = pt + 5;pt.Print();return 0;
}
答案:P
(7)以下叙述中正确的是( D )。
A.""(连续两个双引号)是空的字符串,’’(连续两个单引号)是空字符NULL
B."\“与’\’ 都是字符串常量
C.”\n"和’\n’都是回车字符
D.’’\x41’和’\101’是等效的
解释:
A ‘’(两个连续的单引号)是空字符,不占用内存空间,不是字符常量,常量是有地址的。
B “\“是’\'不是,字符串是双引号。
C 字符是单引号 '\n’是回车字符
D.”\x41"为十六进制:4 * 16 + 1* 0 = 65;’\101’为八进制:1 8^2 + 0 8+1*1 = 65;
(8)C++小知识
a.sort():C++中对数据进行排序;如sort(v.begin(),v.end());
b.find():C++中查找数据,如str.find(ch);在字符串里面查找ch,找到则返回位置,未找到则返回-1;
(9)32位平台上struct { unsigned char a; int b; short c } s;请问s的起始地址下面说法正确的是哪一个?()
解释:
因为结构体里面int占用字节最长为4字节,故按照int类型进行对齐
(10)常见成员函数形式:
解释:
常成员函数格式:
类型说明符 函数名(参数表)const;
例:void print() const;
(11)(指针、const)下面3段程序代码的效果一样吗?
int b;
(1)const int *a = &b;
(2)int const *a = &b;
(3)int *const a = &b;
解释:
const在*
的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);在*
的右边,则指针的指向不可变。简记为"左定值,右定向"。
(12)(构造函数、拷贝构造函数)
(1)
class classA {...};
class classB
{
public:classB(classA a) {mA = a;}
private:classA mA;
};//(1)先构造,还需要进行一次赋值
//(2)第二个就是调用拷贝构造函数,直接初始化列表来进行构造(也就是:mA(a))。这就是初始化列表,很方便。而且初始化列表的顺序只和变量声明的顺序有关
//总体来说(2)执行效率更高(2)
class classA {...};
class classB
{
public:classB(classA a): mA(a) {}
private:classA mA;
};
(13)C++中32位单精度浮点数能表示的十进制有效数字是多少位?(7,6位小数)
(14)short a[10] = {0};sizeof(a)返回:(20 = 2*10)
16位系统:
类型 | 长度 |
---|---|
char | 1个字节 |
char*(即指针变量) | 2个字节 |
short int | 2个字节 |
int | 2个字节 |
unsigned int | 2个字节 |
float | 4个字节 |
double | 8个字节 |
long | 4个字节 |
long long | 8个字节 |
unsigned long | 4个字节 |
32位系统:
类型 | 长度 |
---|---|
char | 1个字节 |
char*(即指针变量) | 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器) |
short int | 2个字节 |
int | 4个字节 |
unsigned int | 4个字节 |
float | 4个字节 |
double | 8个字节 |
long | 4个字节 |
long long | 8个字节 |
unsigned long | 4个字节 |
64位系统:
类型 | 长度 |
---|---|
char | 1个字节 |
char*(即指针变量) | 8个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器) |
short int | 2个字节 |
int | 4个字节 |
unsigned int | 4个字节 |
float | 4个字节 |
double | 8个字节 |
long | 8个字节 |
long long | 8个字节 |
unsigned long | 8个字节 |
15.(protected)
A.从公有和保护继承的派生类继承的子类里可以访问基类的protected成员
B.派生类可以定义一个同名的非protected成员
C.派生类可以访问基类对象的公有protected成员
公有:所有成员皆可访问 保护:只有派生类可以访问 私有:只能类本身能访问 证明友元:不受限制
16.当一个类对象的生命周期结束后,关于调用析构函数的描述正确的是:()
先调用派生类的析构函数,后调用基类的析构函数
17.哪种STL容器中的对象是连续存储的
解释:
List封装了链表,Vector封装了数组, list和vector得最主要的区别在于:
1.vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。
2.Map,Set属于标准关联容器,使用了非常高效的平衡检索二叉树:红黑树,
他的插入删除效率比其他序列容器高是因为不需要做内存拷贝和内存移动,而直接替换指向节点的指针即可。
18.(加锁保护)假设下面的函数foo会被多线程调用,那么让i、j、k三个变量哪些因为线程间共享访问需要加锁保护.()
int i = 0;
void foo()
{static int j = 0;int k = 0;i++; j++; k++;
}
解释:
多线程调用时要进行保护时,主要是针对全局变量和静态变量的,函数内的局部变量不会受到影响。
这里i是全局变量,j是局部静态变量,所以要进行保护。
19.(循环条件)循环语句while(!E);中的表达式!E等价于_______ _()
解释:
!E是循环条件,即!E!=0,即E==0.
20.(class类数据类型转换理解)
已知下面的class层次,其中每一个class都定义有一个default constructor和一个virtual destructor。
class X {…};
class A {…};
class B : public A {…};
class C : public B{…};
class D : public X, public C {…};
下面()执行dynamic_cast会失败。
A *pa = new D; X *px =<br>
dynamic_cast<X*>(pa)
D *pd = new D; A *pa = dynamic_cast<A*>(pd)
B *pb = new B; D *pd = dynamic_cast<D*>(pb)
A *pa = new C; C *pc = dynamic_cast<C*>(pa)
解释:
假如集成关系如下:
A <- B <- C
变量定义如下:
A *a =newB; // 本来new了个B,向上转换为A
B* b =dynamic_cast<B*> (a);// 从A再转换为B,因为本质是B,回到自身,所以成功
C* c =dynamic_cast<C*> (b);// 将本质是B的东西,转变为子类对象,所以失败。即c=0.
更灵活一点:
A <- B <- C <- D <- E
A* a =newC;// 本质
B* b =dynamic_cast<B*> (a);// 成功,因为B是C的父类
E* e =dynamic_cast<E*> (a);// 失败,因为E是C的子类
21.(抽象、接口)关于抽象方法的说法正确的是
接口中的方法都是抽象方法
❗️❗️❗️⭐22.(字符串、字符、转义字符)
char是定义字符,用'a'
表示,字符串是用"abcde"表示,转义字符是八进制,不能大于8,像'\087'
这就是错的
23.(指针和引用)【C/C++】指针和引用的使用场景
参考:应用场景
相关文章:

Sketchup插件Vray户外场景设计渲染教程 Vray Next For Sketchup Exterior
Sketchup户外场景设计的Vray Next 你会学到什么 渲染白天和夜晚场景 后期制作 Sketchup的Vray Next 中级sketchup用户 大小解压后:3.83G 1280X720 mp4 语言:英语中英文字幕(根据原英文字幕机译更准确) 大家好, 我是…

实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
贺邦原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,理解系统调用的工作机制。 实验过程: 本文实验选择24号…

三菱plc232数据线驱动下载_三菱PLC与西门子PLC有什么区别?
三菱PLC与西门子PLC有什么区别?分别有什么优点和缺点?该如何选择?学习哪种品牌?首先它们的编程理念不同,三菱PLC是日系品牌,编程直观易懂,学习起来会比较轻松,西门子PLC是德国品牌&a…
Github 树形菜单插件
ajax显示gitlab的,很像mac的树形展示。 直接在左侧做了一个ajax的树,每次访问gitlab自动加载。非常方便呢,在国内网速这么慢的情况下更显得好用了。 下载地址: https://github.com/buunguyen/octotree/tree/master/dist chrome安装…

C/C++、嵌入式秋招之SQL篇
⭐⭐1.选取最大(小)值 SELECT * FROM employees order by hire_date desc limit 0,1解释: 知识点 ORDER BY 根据指定的列对结果集进行排序,默认按照升序,降序 ORDER BY DESCLIMIT(m, n) 从第 m 1 行开始取 n 条记录…

C4D样条曲线建模大师班 Cinema 4D MasterClass: Master Modelling using Splines
通过本课程,快速学习使用样条曲线建模的基础知识,并将您的技能提升到一个新的水平 你会学到什么 能够使用样条线对整个对象进行建模 三维建模和UV展开 能够找到模拟复杂形状的最佳方法 无数的提示和技巧 在项目中应用蓝图的真实尺寸 对Uv制图有更好的理…

从头到尾彻底解析Hash表算法
从头到尾彻底解析Hash表算法 发布时间: 2013-10-02 10:26 阅读: 25156 次 推荐: 14 原文链接 [收藏] 作者:July、wuliming、pkuoliver 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;第二部分为关于H…

ftp windows无法访问此文件夹请确保输入的文件名_企业实战|企业FTP搭建
安装Vsftpd提前关闭selinux 和firewalld防火墙1.安装vsftp软件包 $ yum -y install vsftpd*2.启动vsftpd服务器 $ systemctl restart vsftpd $ systemctl enable vsftpd3.检查服务是否正常启动 $ ps -ef|grep vsftp && netstat -tunlp|grep 21至此 匿名用户的ft…

C++、嵌入式软开之指针
1.(指针数据)int* pa[5]; 描述: pa是一个具有5个元素的指针数组,每个元素是一个int类型的指针; 2.(二级指针)以下程序的输出结果是: #include <iostream> using namespace std; void func(char **m){++m;cout

3dsMax插件V-Ray建筑可视化三维渲染细节技术学习教程
通过学习可用于相机放置、建模、修整等的策略,生成令人印象深刻且逼真的建筑三维渲染。了解如何将您的3D渲染场景提升到一个新的水平,以使您的图像引人入胜、有趣且讨人喜欢。在本课程中,讲师Verena Tatiana首先讨论了不同的细节处理方法&…

所有表单对象_Laravel 表单方法伪造与 CSRF 攻击防护
1、表单方法伪造有时候,我们可能需要手动定义发送表单数据所使用的 HTTP 请求方式,而 HTML 表单仅支持 GET 和 POST 两种方式,如果要使用其他的方式,则需要自己来定义实现。HTTP 请求方式概述最常见的 HTTP 请求方式自然是 GET 和…

使用按钮控制HTML5背景音乐开关
<!DOCTYPE HTML> <html> <head> <meta charset"utf-8"> <meta name"viewport" content"widthdevice-width; initial-scale1.0"> <title>演示:使用按钮控制HTML5背景音乐开关</title></…

hibernate和struts2实现分页功能
1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法: public interface PersonDAO {public List<Person> queryByPage(String hql, int offset, int pageSize);public int getAllRowCount(String hql); } 2.DAO层接口的实现类…

Cmake软件编译opencv报错,CMake Warning at cmake/OpenCVDownload.cmake:193 (message): FFMPEG: Download...
当执行如下操作时: 出现下面报错, 在链接ipaddress.com查询raw.githubusercontent.com地址,然后将ip添加至C:\Windows\System32\drivers\etc\hosts中: 保存后,重新在cmake软件中点击“Configure”等待即可。

Blender+SP+UE5游戏艺术工作流程学习
Blender到虚幻引擎5 Blender游戏艺术 Blender for Game Art 你会学到: 如何在Blender中创建三维模型 UV如何展开和布局 如何在Substance Painter中表现肌理 如何使用虚幻引擎5 如何在UE5中点亮室内环境 MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz&…

JQ 全选后获取选中的值_为什么在PBI中还需要切片器之三:Excel切片器之度量值切换...
Excel切片器之度量值切换原创 海峰没想到上篇文章一经发出,很快就过了10个留言,大喜过望,今天立马揭晓切片器之度量切换的应用。切片器之度量切换----参数法创建参数表,如下并导入数据模型创建需要的度量值,利润合计万…

layoutSubviews总结(转)
- (void)setNeedsDisplay- (void)drawRect但是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero时,也会触发 You should override this method only if the autoresizing behaviors of the subviews do not offer the behavior you want. layoutSubviews, …

PHP日期格式转时间戳
PHP 提供了函数可以方便的将各种形式的日期转换为时间戳,该类函数主要是: strtotime():将任何英文文本的日期时间描述解析为时间戳。mktime():从日期取得时间戳。strtotime() strtotime() 函数用于将英文文本字符串表示的日期转换…

TFmini传感器使用
使用激光传感器 打开地面站,Mavlink控制台输入tfmini start --> tfmini status -->显示 current_distance:数字 即可得到距离; 将timini插到口UART&I2C B上面 需要在自启动文件中添加tfmini的自启动,否则出来的数据是0;…

3DsMax渲染插件VRay NEXT完整的视频指南
要求 基本的计算机和三维软件知识 这门课程对初学者和进阶者都有好处 我们确实经历了许多你甚至不知道存在的功能 VRay NEXT for 3Ds Max – Complete Video Guide 欢迎来到V-RAY视频手册 流派:电子学习| MP4 |视频:h264,1280720 |音频:aac,44100 Hz语言…

MyEclipse中运行环境jre、编译级别、tomcat运行环境区别
运行环境JRE SYSTEM LIARARY引入项目中依赖的jdk基础包,在java build path --》library中可以切换 编译级别是项目编译成.class时使用的编译jdk版本,只能向下编译 tomcat运行环境选择jdk版本, 以上三个配置最好一致,如果不一致可以…

食堂就餐刷卡系统源码_智慧食堂重新定义你的食堂管理系统
智慧食堂有着针对于多种业态的适用行解决方案,可以说几乎是满足了所有团餐食堂,从进销存管理到财务系统再到智能硬件,让对食堂有着传统麻木观念的人群有了耳目一新的变化,下面就跟大家说几个智能硬件亮点,从新帮你定义…

2022-2028年全球与中国闪光棉市场研究及前瞻分析报告
【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了全球与中国闪光棉行业市场行业相关概述、全球与中国闪光棉行业市场行业运行环境、分析了全球与…

WebAPI初探
由于即将要接手的新项目计划用ASP.NET MVC3来开发,所以最近一段时间一直在看相关的书或文章。因为之前在大学里也曾学习过MVC2开发,也做过几个简单的MVC2的小型测试项目,不过在后来工作以后主要还是开发WebForm的项目,所以MVC的东…

ROS控制无人机offboard模式
在确保已经安装ROS以及Mavros情况下使用下列步骤 1.打开PX4源码程序,运行gazebo cd Firmware make px4_sitl_default gazebo2.打开Mavros roslaunch mavros px4.launch fcu_url:"udp://:14540127.0.0.1:14557"3.运行功能包程序 rosrun offboard_node o…

业余快速学习虚幻引擎教程
仅用5小时学会虚幻引擎! 你会学到什么 专为希望在业余时间打造虚幻引擎技能的艺术家和开发人员量身定制的专业技术 从几何图形到材料,从照明到互动,所有方面的提示 探索如何创造建筑水的效果 如何使用顶点绘制交互绘制多种材质 如何将特定地…

bpython ipython_安装ipython后命令找不到ipython bpython -bash: *python: command not found
原博文 2018-10-30 21:53 − ipython bpython -bash: *python: command not found 问题: 当pip安装ipython, bpython后, 直接执行ipython or bpython会报错:*python... 相关推荐 2019-12-09 17:35 − 运行xcall.sh jps时提示,报错“bash: jps…

js正则表达式/replace替换变量方法
转自:http://www.blogjava.net/pingpang/archive/2012/08/12/385342.html 1. javascript 正则对象替换创建和用法:/pattern/flags 先简单案例学习认识下replace能干什么: 正则表达式构造函数: new RegExp("pattern"[,"flags&q…

第二版地面站加入"参数列表"
1. 连接界面 2. 电子地图 3. 参数列表后续新加入功能:待加入…

Blender中的主程序纹理学习课程 Master Procedural Texturing in Blender
挖掘Blender不可思议的强大节点编辑器的无限潜力。 你会学到: 逐步构建高级和高度可定制的程序纹理。 将许多不同层次的细节结合成一个复杂而现实的结果。 从头开始构建高级程序纹理背后的思维过程。 使用组节点为您的材料创建超级方便的定制。 课程获取:Blender中…