
C++
troy_wu
student
展开
-
C++ primer中有很多好玩的东西
C++ primer中有很多好玩的东西,主要包括以下这么多。智能指针,随机数引擎,流随机访问,RTTI,union,volatile,extern "C"。智能指针智能指针有auto_ptr,shared_ptr, weak_ptr。这里就简单介绍以下,详细还得看书啊。用法都是shared_ptr这种。智能指针最主要的用途就是能够在运行完的时候,自动把内存释放掉,不用我们惦记着释放,这原创 2016-03-25 15:40:39 · 872 阅读 · 0 评论 -
C++ 多重继承 虚继承 虚函数表 多态
C++中的多重继承和虚继承是一个非常重要的概念,也是看你是不是懂C++的一个重要的标志之一。这中间包括了运行时多态,虚函数表等等相关概念。多重继承,顾名思义,是一个类继承了多个父类。例如class C:public A, publicB{};这样就是一个多重继承。首先看看多重继承的构造和析构函数。多重继承的构造函数是先执行父类中的构造函数在执行自己的构造函数,多个父类按照继承顺序来。上原创 2016-03-25 15:05:11 · 4627 阅读 · 0 评论 -
C++ dynamic_cast static_cast const_cast reinterpret_cast
C++中的强制转换类型主要有4种,分别是static_cast, dynamic_cast, const_cast, reinterpret_cast。我们首先来说一下比较简单的两种吧。const_castconst_cast主要是用来修改的const和volatile属性的。const char *pc;char *p = const_cast(pc);//正确,但是通过p写原创 2016-03-25 14:23:58 · 1094 阅读 · 0 评论 -
C++ 引用和指针 const与#define #define与内联函数
面试的时候总会有这样的问题,让你比较一下引用和指针,const与#define ,#define与内联函数 new delete与malloc free(这个已经写过了),接下来就看看比较结果。引用和指针引用其实是变量的另一个别名而已,它用的时候完全与之前的变量一模一样。引用使用的时候是有规则的:(1)引用创建时候必须初始化(指针可以在任何时候初始化)(2)引用一旦创建就不能更原创 2016-03-24 16:55:50 · 988 阅读 · 0 评论 -
C++ malloc free与new delete
之前面试的时候面试官问了我一个问题,是C语言中有了malloc和free为什么还要再有new 和delete。说一下这两者的区别。其实之前也有看过这个东西,包括malloc free是C语言的库函数,而new和delete是C++的操作符。malloc开辟出的是一片空间,返回的是一个void *的指针,用的时候必须强制转换。而new直接返回的就是该类型的指针。但是这些都不是最为重点的。最为原创 2016-03-24 16:00:29 · 621 阅读 · 0 评论 -
C++ 重载 覆盖 隐藏
重载 覆盖 隐藏是C++中最为常见的几种函数相关的概念,特别是在存在虚函数的类继承中特别容易混淆。因此,区分三个概念是非常重要的。重载(overload)是在一个类中,相同的函数名,不同的参数,可以实现重载。跟返回值无关,返回值不同,不能叫做重载。不是两个函数的名字相同就能构成重载。全局函数和类的成员函数同名也不算重载,因为函数的作用域不同。例如void Print();//全局函数原创 2016-03-24 15:44:17 · 642 阅读 · 0 评论 -
C++ 拷贝构造函数和重载赋值函数
拷贝构造函数和重载赋值=的函数可以有效防止在浅复制过程中可能对于同一片内存释放两次的问题。然而拷贝函数和重载复制=的函数很容易混淆。拷贝构造函数是在对象创建时调用的,而赋值函数只能被已经存在的对象调用。一个例子 类String的拷贝构造函数和赋值函数。//拷贝构造函数String::String(const String &other){}//赋值函数S原创 2016-03-24 15:05:10 · 4196 阅读 · 1 评论 -
C++ 空指针调用函数 静态绑定
首先看一段代码是否知道其正确还是错误。class A{public:void print(){cout }};void main(){A *a = NULL;a.print();}问你程序是否正确执行,或者执行结果是什么。这就是一个典型的表示C++是一个静态语言的特征。可以阐明“静态绑定”和“动态绑定”的区别。真正的原因是:因为对于非原创 2016-03-24 14:38:57 · 1206 阅读 · 0 评论 -
C++ 类的继承和组合
C++中设计孤立的类是非常容易的,难的是如何设计正确的基类和派生类。继承(inheritance) 组合(composition)如果类A和类B没啥太大关系,不要为了让类B多点功能就硬是让它继承类A,这样就好像一个好好地大老爷们你给他各种吃人参,吃甲鱼补身体一样。还有关键的一点是如果B是A的一种(a kind of)这时候就要用到继承了,比如Man是一种(a kind of)Human原创 2016-03-24 14:23:32 · 701 阅读 · 0 评论 -
C++ const提高函数的健壮性
const提高函数的健壮性参数const只能修饰输入参数。因为输出参数的话是需要修改的,如果const修饰过后就白扯了。const作函数的输入参数是,可以采用指针或者引用传递,用const修饰,这样就可以防止意外修改了,但是如果是值传递,即没有指针或者引用时就不需要了,因为参数复制,即使函数改了也是白改,不会影响实参注意 对于费内部数据类型的输入参数,应该将值传递改为const引用原创 2016-03-24 14:11:57 · 600 阅读 · 0 评论 -
C语言 fork()笔试题
分享腾讯笔试中的一道题,是关于fork()的。#include#include #include void main(){int i=0;for(i=0; i{fork();printf("K");}}问你一共打印出几个K。如果了解fork()工作机制的人会很快答出6个K,P1产生了P2和P3两个进程,P2产生了P4进程,P1,P2打印两次(原创 2016-04-05 16:33:55 · 788 阅读 · 0 评论 -
C++ 判断double变量是否为0
在笔试题中我们总会看到让判断double变量是否为零是否正确的题目。判断double变量是否为零不能像我们直观想象的那样double d;if( d == 0 );这种做法是极其错误的,因为double是双精度的,他表示本身就是有精度误差的,所以这样判断零不正确。应正确步骤应该是先定义一个精度范围,当double小于该精度范围时就可以判定double变量是否为0了。代码如下:#define M原创 2016-04-02 10:43:41 · 16253 阅读 · 1 评论 -
C++ 实现堆排序 归并排序 快速排序
#include using namespace std;//////////////////////快排void quickSort( int array[], int left, int right ){int i=left, j=right;int x = array[i];if(i{while(i{while(i{if(array[j]原创 2016-04-19 10:02:06 · 701 阅读 · 0 评论