![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++面试
这里主要是整理来自面试书籍以及网络关于C++面试题的答案和解释,希望对大家有所帮助
酸菜鱼的鱼
Linux rtos 驱动应用开发 本博客主要用于工作学习的总结和备份,欢迎大家留言评论交流,谢谢
展开
-
python调用c/c++的方法
首先编写一个c++文件api.cpp:#include <Python.h>class MyClass { public: int add(int x,int y) { return x+y; }};extern "C" int add(int x,int y){ MyClass obj; return obj.add(x,y);}...转载 2020-04-05 13:49:37 · 302 阅读 · 0 评论 -
c++中const的作用
本文总结了c++中const作用,以供读者参考。1.const用于定义常量。const定义的常量编译器可以对其进行数据的静态类型安全检查。这一点有别于通过宏的方式定义常量。2.const修饰函数的形式参数。当输入的参数是用户自定义的类型和抽象的数据类型时,应该将值传递改为以const &的形式。如下形式:void fun1(B b);//自定义类型B采用值传递。效率较低...原创 2020-02-17 14:03:45 · 3802 阅读 · 0 评论 -
c/c++中atexit()函数的使用方法
本文主要介绍c/c++程序在main函数运行结束时如果需要做类似于释放内存等操作的话,可以通过在main函数中调用atexit()函数注册相对应的回调函数(类型为void (*)(void)注册的最大个数是32个),在main函数最后退出的时候,就会按照回调函数注册的相反顺序,执行回调函数中的程序。如下的代码示例:#include "stdafx.h"#include <iost...原创 2020-02-17 11:27:42 · 1005 阅读 · 0 评论 -
c++中函数对象的理解以及bind1st和bind2nd的使用
本文主要介绍了c++中函数对象的基本概念,以及stl中自带的常用的函数对象(包括一元函数对象和二元的函数对象)。然后以binder1st和binder2nd为例以代码为示例,简单的使用方法。然后为了加深对函数对象的理解,自己根据类模板和函数模板编写了一个test_binder1st类模板和test_bind1st函数模板,用以实现stl中binder1st和bind1st的功能。目录函数对...原创 2020-02-16 14:16:01 · 1046 阅读 · 1 评论 -
c++中智能指针auto_ptr的简介以及使用方法
auto_ptr保证在异常被抛出时,分配的对象能够自动消费,内存能够自动释放。使用auto_ptr可以代替指针进行操作,并且不关心内存的释放。解决内存溢出的问题。下面的程序包括auto_ptr一个简单的示例一级自定义的一个类模板smart_pointer,以便链接智能指针的底层实现的原理:测试源代码#include "stdafx.h"#include <iostream&...原创 2020-02-15 23:45:38 · 402 阅读 · 0 评论 -
c++中STLvector的erase方法和algorithm中的remove使用上的一些区别
有下面的示例程序可以看出,电泳erase删除一个元素后,相对应的元素被删除,并且容器中的元素也随之减少了一个,迭代器不能访问。调用algorithm中的remove删除后相对应的元素被删除,但是容器中的元素个数没有变少,并且删除后容器后面的元素往前移动一个位置,并且最后的元素的值,是用之前最后一个元素的值填充。并且remove返回的迭代器位置是最后一个元素的位置。algorithm中的re...原创 2020-02-14 17:55:10 · 779 阅读 · 0 评论 -
C++里面的算法reverse转置的使用以及STL中deque容器的转置使用示例
reverse是全局函数模板,不是一个类中的成员函数。reverse的参数:一个是指向要操作的范围头指针,第二个参数是指向尾的指针。以下的示例程序分别使用reverse函数对数组data和容器vector<string> v1做了转置,其中需要注意的是reverse中的参数的不同。STL中的deque中自带了转置的迭代器:deque<int>::iterator...原创 2020-02-14 16:45:43 · 807 阅读 · 0 评论 -
c++ STL中的map的简单介绍和示例
map的介绍标准的STL关联程序(set,map,multset,multmap)的内部结构是平衡二叉树。平衡二叉树分为:avl-tree,rb-tree,aa-tree。STL的底层机制都是以RB-tree(红黑树)实现的。RB-tree是一个不被外界使用的容器。所以map的底层是以红黑树实现的,注意和hashmap的区分。map底层是红黑树,hashmap底层是hash表。之前在高...原创 2020-02-13 22:39:22 · 219 阅读 · 0 评论 -
C++中STL的set的简单示例
使用如下代码演示了,一个set的string类型的容器中元素的插入,删除和遍历操作。#include "stdafx.h"#include <iostream>#include <set>#include <string>using namespace std;int main(int argc, char *argv[]){ set&...原创 2020-02-13 17:19:03 · 188 阅读 · 0 评论 -
STL中vector和list的概念和使用方法上的差异
vector介绍vector和数组类似,可以支持使用[]的方法随机存取,拥有一段连续的内存空间,并且内存的起始地址不变。就像数组一样由于他的内存空间是连续的,所以在插入删除的时候,会造成内存的拷贝,当该内存空间不够时,需要重新申请一块足够大的内存,并将数据拷贝到新的内存空间中,然后再释放之前较小额那块内存。list介绍list是由数据结构中双向链表的方式实现的,因此内存空间不连续。所...原创 2020-02-12 16:59:28 · 411 阅读 · 0 评论 -
泛型编程--c++中使用模板对任何类型的数组排序
通过使用c++中的泛型编程机制模板,实现可以对任意类型的数组里面的数据进行排序。包括我们自己定义的一个类模板的类型。首先我们对普通的类型int和float类型的数组进行排序,排序的模板:template <typename T>class sort_demo{public: static void sort(T *data, int len, bool (*compar...原创 2020-02-10 18:18:29 · 2562 阅读 · 0 评论 -
泛型编程--c++中的模板特化
模板的特化:函数模板的特化和类模板的特化当函数模板或者类模板需要对一些特殊的类型做特殊处理的时候,需要用到c++中模板的特化机制。比如如下代码,模板ret_max中两个参数t1和t2,可以是多个类型,int,double,。如果需要对特殊的类型如下面代码的char *类型,做特殊的处理,就是里面实现的功能不一样。就可以使用如下的方法。#if 1template <class...原创 2020-02-09 23:02:16 · 190 阅读 · 0 评论 -
泛型编程-c++中的类模板的介绍
函数模板和类模板的介绍函数模板:通过用户提供的具体的参数,C++编译器能够将函数模板实例化,根据同一个模板创建出不同的具体的函数。这些函数之间的不同在于函数内部的一些数据类型不同函数模板的定义格式:template <TYPE_LIST, ARG_LIST> function_definition如://template <class T>templat...原创 2020-02-08 10:22:49 · 185 阅读 · 0 评论 -
泛型编程的简介
泛型编程是一种新的编程思想,基于模板技术有效的将算法和数据结构分离。泛型编程是指编写完全一般化并恶意重复使用的算法。就是指具有在多种数据类型上皆可操作,在c++上就是使用模板实现。例如:我们要实现各个数据类型的最大值。需要写如下的函数重载。int max(int a, int b){ return (a > b) ? a : b;}float max(float a, f...原创 2020-02-07 11:07:36 · 1463 阅读 · 0 评论 -
c++实现一个二叉排序树以及树的递归遍历的实现
二叉排序树的理论介绍:https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%8E%92%E5%BA%8F%E6%A0%91/10905079?fr=aladdin一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3...原创 2020-01-16 20:44:30 · 477 阅读 · 0 评论 -
c++中基于两个栈实现队列的操作
思路:由于队列的先进先出的特性,使用栈的先进后出的特性。可以使用两个栈,其中一个栈实现入队,另一个栈实现出队的操作。定义一个数据节点的类:class data_node{public: data_node() :data(0), next(NULL){}//default constructer function data_node(int value) :data(val...原创 2020-01-12 15:27:15 · 548 阅读 · 0 评论 -
C++实现栈的操作(push和pop)
栈的组织形式:如上图所示:栈也是有多个数据节点组成的,每个节点包含有数据域和指向下一个节点的指针域。并且每次的push、pop和判空都是操作的栈顶指针top。栈中每个数据节点的定义:class data_node{public: data_node() :data(0), next(NULL){}//default constructer function data_nod...原创 2020-01-10 22:46:58 · 16717 阅读 · 0 评论 -
c++中虚函数表的理解
虚函数表是一个类的虚函数的地址表,解决了继承和覆盖的问题,其内容反映类中真实的函数。在一个含有虚函数的类的实例中,这个表存在实例的内存中,编译器在编译的时候都会讲这个表置于实例内存的最前面。一般来说,实例的地址就是虚函数表的地址。也就是说可以通过实例的地址获取到这个表的首地址。定义如下的基类:class base{public: base(int x) :a(x){ cout &...原创 2019-11-24 20:26:01 · 317 阅读 · 0 评论 -
c++的体现多态的一个简单应用
本代码的实现的功能是计算正方形和矩形的面积,所以先建立了一个抽象的基类base_sharp,主要是用于声明面积的打印方法和面积的计算方法。然后声明建立了矩形类rectangle和正方形类square,都对基类做了继承,并且分别对基类中的纯虚函数做了实现。// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。//// test.cpp : 定义控制台应用程...原创 2019-11-23 22:01:54 · 420 阅读 · 0 评论 -
c++抽象类中纯虚函数的理解
纯虚函数:纯虚函数就在基类中只是定义并不实现,需要在派生类中继承并且实现。纯虚函数的意义就是将派生类的共同特性提取出来。虚函数和纯虚函数的区别:虚函数在基类中有实现,并且派生类无需一定要继承,派生类可以继承并且重写,实现多态。抽象类:一个类中含有一个或者多个纯虚函数,那么这个类就是抽象类。不能实例化对象,只能定义指针,指向派生类以实现多态。代码示例:// ConsoleAppli...原创 2019-11-21 22:15:35 · 1366 阅读 · 0 评论 -
c++中多重继承二义性产生以及二义性的消除方法
实际的业务场景中,一些事物会有多个属性。由此c++引入了,多重继承的概念,也就是允许一个派生类指定多个基类,这样就被叫做多重继承。如下代码:#include "stdafx.h"#include <iostream>#pragma warning(disable:4996)#include <string>using namespace std;cl...原创 2019-11-20 23:07:09 · 1605 阅读 · 0 评论 -
c++中虚函数的理解
派生类实例化一个对象的时候,先调用基类的构造函数,然后再调用派生类的构造函数。指向派生类的基类指针,在调用基类的虚函数时需注意,派生类是否有对基类的虚函数覆写操作,如果有,则会执行派生类覆写的代码,实现多态的效果。代码如下:#include "stdafx.h"#include <iostream>#pragma warning(disable:4996)#inclu...原创 2019-11-19 22:51:26 · 278 阅读 · 0 评论 -
c++中多态的理解
多态的定义:同一种操作作用于不同的对象,有不同的解释,产生不同的结果。c++中的多态分为两类:1.编译时的多态:类中非虚成员的参数和返回值,确定不同的操作。2.运行时的多态:到程序的运行的时候,才根据实际情况决定实现何种操作。派生类继承并覆写基类的虚函数成员。以下是运行时多态的一个简单示例:#include "stdafx.h"#include <iostream&g...原创 2019-11-18 21:50:13 · 944 阅读 · 0 评论 -
c++中私有继承和组合的关系
私有继承派生类会获得基类的一份备份,同时获得基类的public,protected接口的权利,以及重写基类虚函数的能力。组合没有这些能力。私有继承和组合都能够表示基类和派生类的有一个的关系,即:派生类有一个基类。下面代码是私有继承和组合的一些实现上的区别。代码实例// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。//// test...原创 2019-11-17 22:39:36 · 435 阅读 · 0 评论 -
c++实现字符串的加法+和赋值=运算符的重载
c++中的operator特性可以帮助我们实现一些类特有的功能,帮助我们在对字符串操作中实现运算符的重载。代码如下// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。//// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#pragma war...原创 2019-11-17 16:15:20 · 3473 阅读 · 0 评论 -
c++中的重载和覆写的区别
重载:1.重载方法名必须相同。2.参数类型和数量可以不同3.返回值的类型可以不同4.c++中的重载时在编译器编译阶段完成的,不属于面向对象的编程覆写:1.是指在派生类中重写基类的虚函数。2.函数名,参数类型和参数数目必须相同3.只能是重写基类的虚函数或者抽象函数。4.覆写是面向对象编程的重要特性,是在程序运行的时候决定的。...原创 2019-11-16 21:44:49 · 395 阅读 · 0 评论 -
c++中统计类实例化的次数(static 的使用以及临时对象的理解)
目录代码实现:执行结果结果分析代码实现:// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。//// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>using namespa...原创 2019-11-15 22:29:48 · 1285 阅读 · 0 评论 -
c++中析构函数,构造函数和复制构造函数的理解
// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>//#pragma warning(disable:4996)using namespace std;class test{public: test() { cout <&...原创 2019-11-13 22:04:43 · 201 阅读 · 0 评论 -
c++中临时对象的理解
目录代码源码:代码的执行结果:下面对输出结果逐一分析:代码源码:// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>//#pragma warning(disable:4996)using namespace st...原创 2019-11-13 21:27:36 · 334 阅读 · 0 评论 -
c++中类String的构造函数,赋值函数和复制函数的实现
代码如下:// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>#pragma warning(disable:4996)using namespace std;class String{private: char *m_Stri...原创 2019-11-13 09:32:14 · 1215 阅读 · 0 评论 -
c++中调用基类的构造函数对基类的私有成员初始化
如果基类有私有成员,并且需要在派生类中的构造函数中初始化。这是会用到基类的复制构造函数。有如下示例:#include "stdafx.h"#include <iostream>#include <string>using namespace std;class base{private: int i;public: base() :i(0) ...原创 2019-11-10 16:27:13 · 1807 阅读 · 0 评论 -
c++中的深复制和浅复制的理解
浅复制就是新旧两个对象指向同一个外部内容,而浅复制是指为新的对象制作了外部对象的独立复制。如下代码所示,如果在类中没有定义复制构造函数,编译器就会生成默认的复制构造函数,这个构造函数就是浅复制的作用,当代码t2 = t1执行的时候,就会执行编译器默认的构造函数。这里默认的构造函数就是将t1中的buf的值也就是指向的地址,复制给了t2,所以代码执行的时候两个指针是相同的:如果在类中添加上...原创 2019-10-21 22:38:58 · 394 阅读 · 0 评论 -
一段简单c++代码帮助理解复制构造函数
复制构造函数被调用的条件:1.一个对象以值得方式传入函数体。2.一个对象以值得方式从函数体返回。3.一个对象需要通过另外一个对象初始化。如下代码:class test1{public: int a; test1(int x) { a = x; cout << "a = " << a << endl; } test1(t...原创 2019-10-20 16:32:41 · 178 阅读 · 0 评论 -
C++中class继承构造函数和析构函数的执行顺序
如下示例:class base{private: int i;public: base(int x) { i = x; cout << "base structor function" << endl; } ~base() { cout << "the class base destructor is called i = "...原创 2019-10-11 21:40:23 · 283 阅读 · 0 评论 -
C++实现读取文件的指定行数的方法
相关的理论基础,可以参考这个博客的内容:https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html#include <fstream>#include <iostream>#include <map>using namespace std;using std::map;map<in...原创 2018-11-28 19:44:28 · 5396 阅读 · 0 评论 -
cpp文件调用c文件中的函数编译出现:undefined reference to `c_function()'
背景:存在如下的c文件中定义一个函数:c_file.cint c_function(void){ int a = 0, b = 0; xxxxx return 0;}c_file.h#ifndef __C_FILE__#define __C_FILE__xxxxxint c_function(void);xxxxx#endif...原创 2019-01-09 19:22:20 · 6301 阅读 · 0 评论 -
rk芯片的sdk中CameraHal的框架梳理--基于rv1108的cvr平台
以下内容主要来自于rk的相关资料。camera hal的作用:Camera HAL 层为硬件抽象层,用于连接应用层和驱动层,使得应用程序不需关心具体的硬件驱动实现,各种硬件实现( ISP, CIF 以及 USB camera)可以使用同一套 API 接口,简化应用开发。以下为camera hal的源码目录:各个目录的作用:build_system: 简易的 HAL 编译系...原创 2019-04-28 19:06:25 · 2566 阅读 · 0 评论 -
linux中netlink使用
linux中netlink使用:此代码片段是在文件:app\video\ueventmonitor\ueventmonitor.c中出现的,在sdk的初始化的时候建立的线程。初步分析此代码的作用是,使用netlink的机制实现接收,事件中断时的消息,解析接收到的消息,根据不同的消息内容,执行不同的操作。主要涉及到如下的事件:1.电池状态事件。如:电量过低。2.块设备事件。如:sd卡...原创 2019-07-29 17:19:06 · 498 阅读 · 1 评论 -
rv1108 sdk app层上电初始化流程
当系统上电启动后,会执行应用层的逻辑,应用层的代码入口是app\video\ui\cvr\camera_ui.c :MiniGUIMainMiniGUIMain api_poweron_init(ui_msg_manager_cb);应用层的初始化,主要是在函数api_poweron_init(ui_msg_manager_cb);中,实现的功能主要是系统参数的初始化,注册回...原创 2019-04-30 18:54:36 · 1244 阅读 · 2 评论 -
c/c++中的struct和class的区别
主要有两种情况:1.C语言中的struct和c++中的class区别。2.c++中的struct和c++中的class的区别。下面分别介绍:1.C语言中的struct和c++中的class的区别C语言中的struct只能定义成员变量,不能够定义成员函数。如下所示:struct point{ int x; int y; void print() ...原创 2019-10-06 22:27:43 · 1907 阅读 · 0 评论