面经:C++篇(持续更新)
一、 左值和右值
二、左值引用和右值引用
左值引用
用法:Type & 左值引用名 = 左值表达式;
注意点:声明时必须初始化,初始化之后无法在改变;对别名的一切操作都等价于对原来变量的操作
右值引用:
int &rb = a + 1; 这样的语法,因为a + 1 此时是作为一个右值来使用的,我们无法把一个右值赋值给一个左值引用。左值引用相当于把一个变量的地址付给另一个变量,这两个变量可以访问同一个内存,右值仅仅是一个数,而非内存中的某块地址,因此无法把右值复制给左值引用(这句话并不准确,有的右值也是有地址的,比如字符串常量)。
声明方法:Type && 右值引用名 = 右值表达式;
T&& t在发生自动类型推断的时候,它是未定的引用类型(universal references),如果被一个左值初始化,它就是一个左值;如果它被一个右值初始化,它就是一个右值,它是左值还是右值取决于它的初始化。
三、拷贝构造函数
拷贝构造函数是C++独有的,它是一种特殊的构造函数,用基于同一类的一个对象构造和初始化另一个对象。
当没有重载拷贝构造函数时,通过默认拷贝构造函数来创建一个对象
A a;
A b(a); //调用拷贝构造函数
A b=a; //调用拷贝构造函数
强调:这里b对象是不存在的,是用a 对象来构造和初始化b的!!
先说下什么时候拷贝构造函数会被调用:
在C++中,3种对象需要复制,此时拷贝构造函数会被调用
1)一个对象以值传递的方式传入函数体
2)一个对象以值传递的方式从函数返回
3)一个对象需要通过另一个对象进行初始化
T function1(){
2 T t(0);
3 return t;
4 }
5 T x=function1();
这里的过程是:
1.创建命名对象t
2.拷贝构造一个无名的临时对象,并返回这个临时对象
3.由临时对象拷贝构造对象x
4.T x=function1();这句语句结束时,析构临时对象
这里一共生成了3个对象,一个命名对象t,一个临时对象作为返回值,一个命名对象x。
四、 模板特化
1.C++模板:
//模板函数
template<typename T, class N> void func(T num1, N num2)
{
cout << "num1:" << num1 << ", num2:" << num2 <<endl;
} //模板类
template<typename T, class N> class Test_Class
{
static bool comp(T num1, N num2)
{
return (num1<num2)?true:false;
}
};
2. C++模板全特化
在模板类里,所有的类型都是模板(template<class T>),而一旦我们将所有的模板类型T都明确化,并且写了一个类名与主模板类名相同的类,那么这个类就叫做全特化类。C++模板全特化之后已经失去了Template的属性了。
//模板函数
template<typename T, class N> void func(T num1, N num2)
{
//cout << "num1:" << num1 << ", num2:" << num2 <<endl;
} //模板类
template<typename T, class N> class Test_Class
{
public:
static bool comp(T num1, N num2)
{
return (num1<num2)?true:false;
}
}; //全特化,模板函数
template<> void func(int num1, double num2)
{
cout << "num1:" << num1 << ", num2:" << num2 <<endl;
} //全特化,模板类
template<> class Test_Class<int, double>
{
public:
static bool comp(int num1, double num2)
{
return (num1<num2)?true:false;
}
注意:一个模板被称为全特化的条件:1.必须有一个主模板类 2.模板类型被全部明确化
3. C++模板偏特化
偏特化就是介于二者之间的模板,它的模板名与主版本模板名相同,但是它的模板型中,有被明确化的部分和没有被明确化的部分。
//模板函数
template<typename T, class N> void func(T num1, N num2)
{
//cout << "num1:" << num1 << ", num2:" << num2 <<endl;
} //模板类
template<typename T, class N> class Test_Class
{
public:
static bool comp(T num1, N num2)
{
return (num1<num2)?true:false;
}
}; //偏特化,模板函数
template<class N> void func(int num1, N num2)
{
cout << "num1:" << num1 << ", num2:" << num2 <<endl;
} //偏特化,模板类
template<class N> class Test_Class<int, N>
{
public:
static bool comp(int num1, double num2)
{
return (num1<num2)?true:false;
}
注意:偏特化的条件:1.必须有一个主模板 2.模板类型被部分明确化
4. 模板类调用优先级
全特化类>偏特化类>主版本模板类
模板特化作用:性能优化,针对某一类型特定实现,使模板能够正常工作
五、 STL 算法对自定义类型重载=运算符
六、 delete 和 delete[] 区别
delete和delete[]对基本数据类型没有区别
但对类对象有区别,delete只调用一次析构函数,而delete[]调用多次析构函数
七、继承
基类不能被继承的:构造函数,析构函数,赋值运算符,友元函数
不能被声明虚函数的:构造函数,new ,delete(因为new和delete是静态成员函数,静态成员函数是不能被声明为virtual的,因为virtual是针对对象,而静态是针对类)
默认生成的:构造函数,析构函数,赋值运算符=,取地址运算符&
6.shared_ptr内部实现原理
7.vector内存进制,插入,删除
8.内存管理方法
面经:C++篇(持续更新)的更多相关文章
- 《Entity Framework 6 Recipes》中文翻译系列 目录篇 -持续更新
为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...
- WebApi学习总结系列第三篇(Http)此篇持续更新...
越了解Http对WebApi开发就越有帮助,因为WebApi就是建立在Http基础之上的. 一.Http: 通过 <ASP.NET Web API 2 框架揭秘>一书中 了解到 什么叫We ...
- Python开发【第二十三篇】:持续更新中...
Python开发[第二十三篇]:持续更新中...
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
ASP.NET MVC深入浅出系列(持续更新) 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...
- C++入职学习篇--代码规范(持续更新)
C++入职学习篇--代码规范(持续更新) 一.头文件规范 在头文件中大家一般会定义宏.引入库函数.声明.定义全局变量等,在设计时最后进行分类,代码示范(自己瞎琢磨的,请多多指点): #ifndef T ...
- C++入职学习篇--新员工入职(持续更新)
C++入职学习篇--新员工入职(持续更新) 本人菜鸟一枚,刚刚结束学业生涯,入职C++软件开发岗位,之前对C++一窍不通,刚刚入职,亚历山大,但为祖国和平发展,本人励志为中华崛起而奋斗,学不好C++誓 ...
- 跟我学SpringCloud | 终篇:文章汇总(持续更新)
SpringCloud系列教程 | 终篇:文章汇总(持续更新) 我为什么这些文章?一是巩固自己的知识,二是希望有更加开放和与人分享的心态,三是接受各位大神的批评指教,有任何问题可以联系我: inwsy ...
- 前端深入之js篇丨Array数组操作从入门到成神Up Up Up,持续更新中
写在前面 随着前端深入的不断学习,发现数组这个数据结构在前端中有着相当大的存在感,由于我初学前端的时候并没有系统性的学习数组,所以我将通过这篇文章同你一起学习数组,希望我们能一起进步,学会熟练操作数组 ...
- <精华篇>:iOS视频大全-持续更新
注意:新浪微博分享的资料和简书分享的资料,略有不同! 小码哥swift3.0版 斗鱼项目视频:点击下载 iOS开发25个项目实战:点击下载 2016PHP全套下载:点击下载 黑马刀哥iOS视频精选 ...
- iOS系列教程 目录 (持续更新...)
前言: 听说搞iOS的都是高富帅,身边妹子无数.咱也来玩玩.哈哈. 本篇所有内容使用的是XCode工具.Swift语言进行开发. 我现在也是学习阶段,每一篇内容都是经过自己实际编写完一遍之后,发现 ...
随机推荐
- nodejs初印象
初学Nodejs,特意在此记录学习过程,算是对这段时间的一个summary吧,相互勉励,共同进步嘛,Now Begin: 1.什么是nodejs nodejs 是一种基于事件驱动.非阻塞I/O模型,用 ...
- [javaSE] 标识符大小写
java中是严格区分大小写的. PHP中函数,类名称不区分大小写,变量和常量区分大小写 public class VariableDemo { public static void test(){ S ...
- Java基础——面向对象
Hello 大家好,我又来啦,今天我们来说说Java的面向对象. 还记得之前去面试几家公司的实习生职位,大部分面试官都问过我有关面向对象 的问题,不知道以后还会不会问,估计是不会了吧...(:3[▓▓ ...
- 【SSH网上商城项目实战23】完成在线支付功能
转自: https://blog.csdn.net/eson_15/article/details/51464415 上一节我们做好了支付页面的显示,从上一节支付页面显示的jsp代码中可以看出,当用 ...
- 【SSH网上商城项目实战11】查询和删除商品功能的实现
转自:https://blog.csdn.net/eson_15/article/details/51360804 在第8节我们完成了查询和删除商品类别的功能,那么现在实现查询和删除商品的功能就很好做 ...
- MySQL 索引知识总结
将 mysql 的索引以书本的索引类比比较贴切,要找到一个关键字为xxx 的条目,首先翻到索引中查找有哪些页码涉及到,无疑就缩小了范围.在这个小范围内再寻找符合条件的数据,效率就会提高许多. mysq ...
- jquery replace方法去空格
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- HMTL label标签
label标签和特定表单控件关联之后,如果用户在 label 元素内点击文本,就会触发关联的表单控件.就是说,当用户选择该label标签时,浏览器就会自动将焦点转到和label标签相关的表单控件上. ...
- SQL Server 字符串合并
应用场景:多条数据某列数据以某种样式合并成一条数据,例如: 1 1,0 小赵 0012 2,0 小钱 002 ==== ...
- Install Java JDK JRE on Ubuntu/Debian with Apt-Get
Introduction As a lot of articles and programs require to have Java installed, this article will gui ...