![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
Veaxen
这个作者很懒,什么都没留下…
展开
-
关于#ifdef __cplusplus extern
转载自:http://blog.csdn.net/huangtonggao/article/details/6230308时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif #endif 这样的代码到底是什么意思呢?首先转载 2016-05-28 11:50:13 · 345 阅读 · 0 评论 -
构造函数中,虚拟机制不会被执行
#include <iostream>class A{public: A(){doSth()}; virtual void doSth(){printf("This is A");}}class B:public A{public: virtual void doSth(){printf("This is B");}}int main(){ B b;原创 2017-03-28 11:41:36 · 597 阅读 · 2 评论 -
<iostream>和<iostream.h>的区别
#include //标准输入输出流#include //非标准输入输出流C++中为了避免名字定义冲突,特别引入了名字空间的定义(namespace),当代码中用时,是继承了C语言的标准库文件的,没有名字空间,因此不用(也不能)使用std::cout。 当代码使用时,输入输出需要引用std::cout。有“.h”的就是非C++标准的,是C的标准库文件,无“.h”的,就要用到命令空原创 2017-03-28 19:40:02 · 400 阅读 · 0 评论 -
C++继承:公有,私有,保护
转载自:http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。转载 2017-03-28 21:57:54 · 294 阅读 · 0 评论 -
C++中虚析构函数的作用
#include <iostream>using namespace std;class Base{public: Base(){}; ~Base(){ cout<<"这是Base类的析构函数"<<endl; }; virtual void DoSomething(){ cout<<"这是Base类的DoSomething"<<en原创 2017-03-28 13:19:58 · 496 阅读 · 0 评论 -
C的隐式类型转换
这篇文章仅仅针对C语言存在的隐式类型转换做一些分析,关于C++的这方面研究,有时间我再另外写一篇文章。关于隐式类型转换,是指发生在没有明确说明的情况下(C语言风格的强制类型转换就是属于我们程序员有明确说明的),编译器自动帮我们执行的类型转换。通常同类型的数据进行运算、比较和赋值的时候我们是不需要担心的,这里我只是说明不同类型的数据进行运算、比较和赋值时,且我们程序员没有指定类型转换时,编译器是如何帮原创 2017-04-08 00:02:40 · 668 阅读 · 0 评论 -
malloc/free与new/delete的区别
相同点:都可用于申请动态内存和释放内存。不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构原创 2017-04-08 00:03:31 · 301 阅读 · 0 评论 -
对C++中构造函数、析构函数、虚函数及普通成员函数的理解
这里我们主要讨论构造函数、析构函数、普通成员函数、虚函数,对这几种函数说说自己的理解。对构造函数的总结对构造函数,我们先来看看如下的代码#include using namespace std;class Base{public: Base(){ cout"This is constructor from Base"<<end原创 2017-04-08 01:26:31 · 2096 阅读 · 0 评论 -
经典算法之传染病问题
问题描述:一个坐标表格,每个单元表格就代表一个地方有传染病病毒存在。 无病毒的地方用0标记,有病毒的地方用1标记。(为了方便表示边界,我在周围加了个-1的墙壁) 而我们实际常常研究的是估算受感染程度,该程序需要在接收一个坐标为输入后以该点为中心向周围的8个方向进行递归拓展,检查周围区域是否被感染。得到的菌群用2来标记。类似的应用有图像处理上的ps可以用这个算法找出某种颜色值的分布。然后要考虑到边转载 2017-05-13 13:12:30 · 3875 阅读 · 0 评论 -
C++空类默认生成哪些函数?
定义一个空的C++类,例如class Empty{}一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,一般编译过去就相当于class Empty{public:Empty(); // 缺省构造函数Empty( const Empty& ); // 拷贝构造函数~Empty(); // 析构函数Empty& operator原创 2017-05-13 13:19:06 · 890 阅读 · 0 评论 -
explicit构造函数的作用
下面程序f()被调用时,输出是什么??#include <iostream>#include <string>using namespace std;class Number{public: string type; Number():type("void"){}; explicit Number(short):type("short"){} Number(i原创 2017-05-13 13:19:43 · 665 阅读 · 0 评论 -
<iostream>和<iostream.h>的区别
#include <iostream> //标准输入输出流#include <iostream.h> //非标准输入输出流C++中为了避免名字定义冲突,特别引入了名字空间的定义(namespace),当代码中用<iostream.h>时,是继承了C语言的标准库文件的,没有名字空间,因此不用(也不能)使用std::cout<<x;。 当代码使用<iostream>时,输入输出需要引用std::c原创 2017-03-07 19:47:35 · 357 阅读 · 0 评论 -
C++函数中那些不可以被声明为虚函数的函数
常见的不不能声明为虚函数的有:普通函数(非成员函数);静态成员函数;内联成员函数;构造函数;友元函数。 1、为什么C++不支持普通函数为虚函数? 普通函数(非成员函数)只能被overload,不能被override,声明为虚函数也没有什么意思,因此编译器会在编译时邦定函数。2、为什么C++不支持构造函数为虚函数? 这个原因很简单,主要是从语义上考虑,所以不支持。因为构造函数本来就是为了明确初转载 2017-03-11 01:38:09 · 310 阅读 · 0 评论 -
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solutio原创 2017-03-10 13:43:12 · 1448 阅读 · 0 评论 -
【C++】static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
(使用vs2010所带的编译器) 转载自 http://www.cnblogs.com/jerry19880126/隐式转换(implicit conversion)short a=2000;int b;b=a;short是两字节,int是四字节,由short型转成int型是宽化转换(bit位数增多),编译器没有warning,如下图所示。宽化转换(如char到in转载 2016-04-22 00:33:25 · 373 阅读 · 0 评论 -
【C/C++】使用预编译命令时犯下的一个错误
#define START_ADDR ((unsigned int*)0x08008000)............#define TST START_ADDR............#if TST==START_ADDR......#endif以上预编译命令是不能被预编译器处理的,因为这里我试图在 #if 中进行强制类型转换,而这是要编译器去完成原创 2016-04-22 01:02:24 · 402 阅读 · 0 评论 -
const修饰的常量也是可以被修改的!真的是世界上唯一不变的是变化
这里我用的编译器是Dev c++进行测试的,在研究芯片代码加密的时候偶然发现的const常量也是可以被恶意修改的,所以我在Dev c++里进行了测试,结果发现果不其然。但是这种行为出现在C/C++里我个人觉得是不难理解的,使用C语言风格的强制类型转换本来就是强大而又带有危险的,并且我认为c/c++提供关键字const其实只是提供了语义上的保护,而只要是存在于可读写的内存中,通过恶意的行为总是可以修原创 2016-05-18 13:18:17 · 962 阅读 · 1 评论 -
C语言的新扩展typeof
说明typeof关键字是C语言中的一个新扩展,是对C语言原先32个关键字的扩展,这一新扩展特性在Linux的源代码中可以经常看到,这一扩展是否有在C语言的新标准中,我没有去验证,但是据了解,大部分的GNU的C编译器都支持了这一扩展,我在DEV C++上也验证了这一点。下面我们来看看这一扩展关键字的用法。typeof的用法 typeof的参数可以是两种形式:表达式或类型。1. 表达式的例子:ty原创 2016-06-09 14:31:30 · 578 阅读 · 0 评论 -
【C/C++】指针与引用的区别
引用是C++对C语言的扩展,引用可以理解为变量的一个别名,所谓别名就是人还是同一个人,只是多了一个名字而已,对变量也是如此。如:int a = 10;int &b = a;这里b就是变量a的一个别名,他们代表的内存地址是完全相同的,注意这里b不是指针,c++没有规定引用的底层实现,所以编译器实现引用时,可以为引用分配空间,也可以不分配空间。引用与应用的主要区别有以下三点:原创 2016-09-09 19:59:47 · 705 阅读 · 0 评论 -
用const定义的常量比用#define定义的常量有那些优势
这里只是说明定义常量的优势,#define的作用不仅仅是可以用来宏定义常量,它的使用非常灵活,这里只与const进行定义常量上的比较。1.const 能够明确指定常量的类型。2.const可以使用C/C++的作用域规则将定义限制在特定的函数或文件中。3.可以将const用于更复杂的类型中,比如常量数组,结构、类对象等。4.因为#define是在预处理阶段进行宏替换展开常量的原创 2016-09-09 22:16:17 · 1051 阅读 · 0 评论 -
【C/C++】鲜为人知的知识--Integer Promotion
Integer Promotion造成两种执行结果首先我们来看看两段代码及其相应的执行结果。#include <iostream> using namespace std;int main(){ signed int a = -1; unsigned int b = a; if(a == b) cout<<"a==b"<<endl; else if原创 2016-08-12 21:38:57 · 1517 阅读 · 0 评论 -
【C/C++】数组和指针的区别
前言C/C++程序中,指针和数组在很多地方都会用到,而且通常是可以相互换着使用的,那我们这种时候就更需要了解两者之间的区别了。数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着一块内存,其地址与容量在其生命期内是不可变的,只有数组的内容可以改变。指针可以随时指向其他变任意类型的内存块,也就是“可变的”,指针远比数组要灵活和高效,指针访问数组元素比采用数组形式访问元原创 2016-09-09 20:27:36 · 1125 阅读 · 0 评论 -
C++中构造函数居然是可以直接调用的
代码如下#include <iostream>class A{public: A():a(0),b(0){std::cout<<"调用第一个构造函数"<<std::endl;} A(int x):a(x),b(x+1){std::cout<<"调用第二个构造函数"<<std::endl;} ~A(){std::cout<<"调用析构函数"<<std::endl;}原创 2017-03-05 14:52:59 · 8410 阅读 · 2 评论 -
C++11新特性:Lambda表达式
转自:https://www.devbean.net/2012/05/cpp11-lambda/或许,Lambda 表达式算得上是 C++ 11 新增特性中最激动人心的一个。这个全新的特性听起来很深奥,但却是很多其他语言早已提供(比如 C#)或者即将提供(比如 Java)的。简而言之,Lambda 表达式就是用于创建匿名函数的。GCC 4.5.x 和 Microsoft Visual Studio转载 2017-03-05 15:54:01 · 390 阅读 · 0 评论 -
STL排序算法
以前一直不重视排序算法,因为之前很少有应用场景,最近在面试过程中发现排序算法经常会被问到,有时在一些笔试或者面试题目中需要用到排序算法来解决问题,如果每次都自己手写排序,那么要相当耗时,而且我也不一定在短时间内写出没有错误的排序算法,这个时候STL里提供的排序算法就十分重要了,而且STL中的排序算法都是各个大神优化的成果,我不认为我可以在没有研究的情况下写出能与STL里提供的算法相媲美的排序。总而言转载 2017-05-13 13:20:26 · 631 阅读 · 0 评论