C++虚函数表详细解释及实例分析



C++虚函数表详细解释及实例分析,C++的虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖(override)的问题,保证其能真实的反应实际的函数。这样,在有虚函数的类的实例中这张表被分配在了这个实例的内存中,所以当我们用父类的指针操作一个子类的时候,这张虚函数表就显得尤为重要了,他就像一个地图一样,指明了实际所应该调用的函数。

说明:虚函数表中只存有一个虚函数的指针地址,不存放普通函数或是构造函数的指针地址。只要有虚函数,C++类都会存在这样的一张虚[......]

Read more

原地矩阵转置算法实现实例介绍



原地矩阵转置算法实现实例介绍,对于一个M*N的矩阵,现将其存储在一个一维数组中,数组长度 M*N,现要实现将该矩阵转置;

要求:
1、空间复杂度要求O(1);
算法实现:
[cpp] view plaincopy
#include <iostream>

using namespace std;

#define M 2
#define N 3
int arr[M*N] = {1,2,3,4,5,6};

void swap(int &a,int &b)
{
a=a^b;
b=a^b;
a=a^b;
}
void trava[......]

Read more

动态规划算法理论介绍及一个小实例

动态规划算法理论介绍及一个小实例。动态规划问题:用来解决最优化问题,基本概念:将一个问题,分解成多个阶段来解决,每一个阶段的决策都依赖于当前的状态,决策过后状态又发生了转移,这种多阶段来解决最优化问题的过程就是动态规划。

基本思想与策略:基本思想与分治法类似,也是将带求解的问题分解为若干子问题(动态规划称之为阶段),按顺序求解子问题(子阶段),前一个子问题解,为后一个子问题的求解提供了信息。在求解任一个子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解(保留的这些局部解一般通过数组进行存储),丢弃其他局部解。依次解决各个子问题,最后一个子问题就是初始问题的解。
由于[......]

Read more

宏定义实现数据交换

宏定义实现数据交换实例。

#include <iostream>

using namespace std;

//单行写

#define swapdata1(a,b) (a)=(a)^(b),(b)=(a)^(b),(a)=(a)^(b);

#define swapdata2(a,b) {(a)=(a)^(b),(b)=(a)^(b),(a)=(a)^(b);}

#define swapdata3(a,b) {int temp;temp=(a);(a)=(b);(b)=temp;}

//多行写

#define swapdata4(a,b[......]

Read more

memcpy的实现

memcpy的实现.

[cpp] view plaincopy
#include <iostream>
#include <string.h>
using namespace std;

void *mymemcpy(void *des,const void * src , int size)
{
char *d = (char*)des;
char *s = (char*)src;
if(d < s)
while(size–)
*d++ = *s++;
else
{
d += size-1;
s += size-1;
wh[......]

Read more

c++堆和栈的区别

java堆和栈的区别.

一、预备知识—程序的内存分配
一个由C/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其
操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回
收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的
全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另
一块区域。 – 程序[......]

Read more

C/C++中static的作用

C/C++中static的作用。

面试题:static有什么作用?

答:在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数

一、       定义全局静态变量 :在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点:

(1)       在全局数据区内分配内存

(2)       如果没有初始化,其默认值为0

(3)       该变量在本文件内从定义开始到文件结束可见

二、       定义局部静态变量:在局部静态变量前面加上关键字static,该局部变量便成了静态局部变量。静态局部变量[......]

Read more

c++ select函数详解及实例分析

c++ select函数详解及实例分析。Select函数在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、 accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,[......]

Read more

i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例

i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例。通常在写for循环 的时候,要实现变量 i 的自增 1 ;往往会在i++ 和++i中随便挑一种写,对于i++和++i的理解,我们往往停留在返回的值的不同,其实i++与++i在实现效率上也有一定的不同(不考虑编译器优化的原因)。

++i的实现效率更高

解释如下:

i++ (在C++中) 在实现的时候,系统会产生一个 local object class INT的临时变量 用于存储原有的数据供返回值用;

 

  1. ++i 的实现[......]

Read more

私有构造函数以及C++单例模型介绍

私有构造函数以及C++单例模型介绍。一般构造函数不是私有或者保护成员,但构造函数可以使私有成员函数,在一些特殊的场合,会把构造函数定义为私有或者保护成员。
C++类的构造函数一般不应该是私有函数,因为私有函数不能被其他类或者全局函数所使用。而创建C++实例需要调用构造函数。
所以如果构造函数是私有函数的话,除了类自己的方法之外,其他类不能构造这个类的实例。一般来说,类做出来就是让其他类使用的,而使用一个类必须先构造它的实例。所以一般情况下,构造函数如果是私有函数,其他类要使用它就很困难了。
构造函数为私有的类有这样的特点:

<1>不能实例化:因为实例化时类外部无法访问其[......]

Read more