
c/c++
hehainan_86
这个作者很懒,什么都没留下…
展开
-
操作符重载
介绍操作符重载和友元的类设计#ifndef VECTOR_H_#define VECTOR_H_#include namespace VECTOR{ class Vector { private: double x; double y; double mag; double ang; char mode; void set_ma原创 2013-04-23 22:08:05 · 494 阅读 · 0 评论 -
c++关键字--mutable
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面转载 2013-09-19 22:21:02 · 621 阅读 · 0 评论 -
C/C++数组名与指针区别深入探索
2008年06月20日 星期五 下午 11:31在网上(http://tech.163.com/05/0823/11/1RR94CAS00091589.html)找的一个讲得很好,希望能对大家有所帮助,以后遇到的问题如果还不是很清楚,有时间就该看看C++编译器源码了,看看新的标准 引言 指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很转载 2013-04-23 14:34:19 · 574 阅读 · 0 评论 -
C++实现多态类的方法
1、c++实现多态的方法其实很多人都知道,虚函数在c++中的实现机制就是用虚表和虚指针,但是具体是怎样的呢?从more effecive c++其中一篇文章里面可以知道:是每个类用了一个虚表,每个类的对象用了一个虚指针。具体的用法如下:class A{public: virtual void f(); virtual void g();private转载 2013-09-25 17:02:34 · 650 阅读 · 0 评论 -
计算机的随机数函数和产生原理
1. 基本函数 在C语言中取随机数所需要的函数是:int rand(void);void srand (unsigned int n); rand()函数和srand()函数被声明在头文件stdlib.h中,所以要使用这两个函数必须包含该头文件:#include stdlib.转载 2013-09-27 22:56:56 · 1817 阅读 · 0 评论 -
再议静态全局变量、静态局部变量、全局变量存在内存的区域,
一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是原创 2013-09-28 22:09:08 · 4847 阅读 · 0 评论 -
利用随机数编写的一个数独
#include #include #include int a[9],b[9]={1,2,3,4,5,6,7,8,9};int c[9];//设计思想是从t位置开始,重新设计数组,t~9保存在一个数组的前面部分,1~t-1保存在后面部分,这样来构成一个序列,并且只要首元素不重复,这个序列的每一位就不会跟上面的序列重复。t有两种来源,一种是因为刚好当前行数%3 == 0时v原创 2013-10-14 10:11:36 · 798 阅读 · 0 评论 -
测试自己的系统是大端还是小端
BIG ENDIAN:最低位地址存放高位字节,可称高位优先,内存从最低地址开始按顺序存放(高数位数字先写)。最高位字节放最前面。LITTLE ENDIAN:最低位地址存放低位字节,可称低位优先,内存从最低地址开始按顺序存放(低数位数字先写)。最低位字节放最前面。 对于单一的字节(a byte),大部分处理器以相同的顺序处理位元(bit),因此单字节的存放方法和传输方式一般相原创 2013-10-14 14:56:34 · 4084 阅读 · 0 评论 -
如何减少频繁分配内存(malloc或者new)造成的内存碎片?
内存池(Memory Pool)是一种内存分配方式。 通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著转载 2013-10-22 15:28:24 · 9422 阅读 · 0 评论 -
平时代码练习----#prama pack、字符串的字节数问题
#include #include using namespace std;class A{};class B{public: B(); virtual ~B();};class C{private:#pragma pack(4)//代表按4字节对齐 int i; short j; float k; cha原创 2013-10-22 17:28:56 · 1343 阅读 · 0 评论 -
strcpy函数
已知strcpy函数的原型是:?1char * strcpy(char* strDest,constchar * strSrc);⒈不调用库函数,实现strcpy函数。⒉解释为什么要返回char *。解说⒈strcpy的实现代码?1234转载 2013-10-30 21:22:04 · 431 阅读 · 0 评论 -
override(覆盖)
首先复习一下:override(覆盖)与overload(重载)的区别:override(覆盖):派生类中重写基类的虚函数。overload(重载):编写一个与已有函数名同名但参数列表不同的函数 《程序员面试宝典》中有一个关于覆盖的题目:#include using namespace std;class A{protected : int m_dat原创 2013-11-05 18:01:55 · 701 阅读 · 0 评论 -
string类型原型
已知类String的原型为: class String {public:String(const char *str =NULL); //普通构造函数 String(const String&s); //拷贝构造函数 ~String(); //析构函数 String & operator =(const String &s); //赋值函数private:cha转载 2013-11-05 14:06:19 · 3013 阅读 · 0 评论 -
虚函数之虚函数表
多态性可分为两类:静态多态和动态多态。函数重载和运算符重载实现的多态属于静态多态,动态多态性是通过虚函数实现的。每个含有虚函数的类有一张虚函数表(vtbl),表中每一项是一个虚函数的地址, 也就是说,虚函数表的每一项是一个虚函数的指针。没有虚函数的C++类,是不会有虚函数表的。两张图: 简单例子: #include #include using n转载 2013-11-05 15:51:38 · 525 阅读 · 0 评论 -
从一道题谈C++中构造函数调用构造函数
题目如下:问下列代码的打印结果为0吗?#include stdlib.h>#include iostream>using namespace std;struct CLS{ int m_i; CLS( int i ) : m_i(i){} CLS() { CLS(0); }};int mai转载 2013-11-06 17:56:01 · 472 阅读 · 0 评论 -
strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。转载 2013-11-08 12:53:08 · 555 阅读 · 0 评论 -
error LNK2001: unresolved external symbol "protected: 类似问题的解决办法
刚刚遇到代码调试的问题:原因是该函数只声明却没有定义。解决办法有两个:1)将出现问题的那个函数注释掉(如果用不到的话);2)在.cpp中定义该函数,哪怕是个空函数也可以的。 记录下,希望对大家有帮助!原创 2013-11-27 16:51:47 · 933 阅读 · 0 评论 -
C语言中三维空间的申请与释放
#include #include /***该函数将申请一个三维的空间,最后又能成功释放掉*/void execute_fun(int m, int n, int p){ char ***p1 ; p1= (char ***)malloc(m*sizeof(char**)); for(int i = 0; i < n ; i ++) { p1[i] = (char **原创 2014-11-18 16:57:30 · 1176 阅读 · 4 评论 -
堆和栈的区别
vc++默认申请的栈大小为2M;堆内存几乎没有限制,一般来讲在32位系统下,堆内存可以达到4G的空间,其实只有2G,另外2G是系统内核用的,访问不了。 堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区转载 2013-09-09 21:29:31 · 502 阅读 · 0 评论 -
约瑟夫环的问题
偶然想到约瑟夫环的问题,就试着编写代码实现一下。首先介绍一下约瑟夫环的问题。 这个就是约瑟夫环问题的实际场景,有一种是要通过输入n,m,k三个正整数,来求出列的序列。这个问题采用的是典型的循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。pL->pTail->next=pL->head解决问题的核心步骤:(程序的基本算法)⒈建立一个具有n个链结点,无头结点的循环链表;原创 2013-09-30 22:29:59 · 555 阅读 · 0 评论 -
c/c++笔试题、面试题(一)(不断更新中)
1、#include using std::cout;using std::endl;int main(){ int x=99999; int count = 0; while(x) { x=x&(x-1); count++; cout } cout return 0;}请问这里输出的count值是________原创 2013-05-06 18:33:38 · 644 阅读 · 0 评论 -
使用Vector类来模拟随机行走
使用程序模拟醉鬼走路问题,将一个人领到街灯柱下,这个人开始走动,但每一步的方向都是随机的,。这个问题的一种表述是,这个人走到离柱灯50英尺处需要多少步。从矢量角度看,这相当于不断将方向随机的矢量相加,直至长度超过50英尺。randwalk.cpp//randwalk.cpp -- using the Vector class// compile with the Vector.原创 2013-04-25 22:56:01 · 980 阅读 · 1 评论 -
c++学习-知识点小结
1、函数中按值传递类对象将调用复制构造函数。最好的办法是按引用传递。 如按值传递的函数: void callme1 (StringBad );//StringBad 是一个类,这里使用的是按值传递 应该改成: void callme1 (StringBad &);// 这个是按引用传递的,不会调用复制构造函数 2、浅复制与深度复制默认的复制构造函数原创 2013-04-28 11:18:20 · 550 阅读 · 0 评论 -
基类和派生类
原文地址:http://hi.baidu.com/bianxuehui/item/d221dc8c306e5e814514cfde* 继承意味着派生类继承了基类的所有特性,基类的所有数据成员和成员函数自动成为派生类的数据成员和成员函数。如:“形状”具有位置、大小、颜色等属性,可以移动、绘制等,由其派生出来的“圆”同样有这些属性和操作。* 派生类不完全等同于基类,派生类可以添加自己特有的转载 2013-05-05 21:38:46 · 1045 阅读 · 0 评论 -
c++继承实例
请参照原文:http://blog.youkuaiyun.com/zhaori/article/details/1700356 //Example: non- virtual destructors for dynamically allocated objects. #include #include using std::endl;using std::cout;cl原创 2013-05-05 22:36:44 · 576 阅读 · 0 评论 -
c++继承实例(转载)
原文地址:http://blog.youkuaiyun.com/zhaori/article/details/1700356c++继承经典例子#include class Base{private:int b_number;public:Base( ){}Base(int i) : b_number (i) { }int get_number( ) {return b_转载 2013-05-05 22:39:24 · 541 阅读 · 0 评论 -
虚函数
原文地址:http://hi.baidu.com/fang_sheng_hui/item/c56ffc46e4b39fd5c1a5929bC++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算转载 2013-05-05 22:18:53 · 510 阅读 · 0 评论 -
IT公司笔试面试题系列
原文地址:http://blog.sina.com.cn/s/blog_4ba5906a0100bejm.html1.假设现有一个单向的链表,但是只知道只有一个指向该节点的指针p,并且假设这个节点不是尾节点,试编程实现删除此节点参考:将下一个节点的内容复制到本节点上,然后把后面的节点内容统一向前移动,最后删除尾节点。void deleteItem(Node *p){ While转载 2013-05-06 09:53:11 · 544 阅读 · 0 评论 -
C语言中的volatile关键字
原文网址:http://www.elecfans.com/lab/code/20110527199969.htmlvolatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改。 用volatile关键字声明的变量i每一次被访问时,执行部件都会从i相应的内存单元中取出i的值。 没有用volatile关键字声明的变量i在被访问的时候可能直接从cpu的寄存转载 2013-05-08 20:54:18 · 444 阅读 · 0 评论 -
虚函数表里边保存的不一定是虚函数的地址
原文地址:http://www.cnblogs.com/cswuyg/archive/2010/08/20/1804716.html 虚函数表里边保存的不一定是虚函数的地址 我一直以为虚函数表里边保存的就是虚函数的地址,前几天做测试的时候才发现这想法不一定是对的。测试代码://虚函数表里边保存的不一定是虚函数的地址.cpp//2010.8.19转载 2013-05-10 11:31:41 · 735 阅读 · 0 评论 -
C++之友元类--来自百度百科
定义友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。使用当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。定义友元类的语句格式如下:friend class 类名(即友元类的类名);其中:friend和class是关键字,类名必须是程序中的一个已定义过的类。注意事项(1) 友元关系不能被继承。原创 2013-09-06 16:58:11 · 659 阅读 · 0 评论 -
C++数据类型转换
c/c++数据类型转换1(float,char,string,CString) Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。转载 2013-09-02 22:40:24 · 729 阅读 · 0 评论 -
c语言中的头文件
字符处理函数本类别函数用于对单个字符进行处理,包括字符的类别测试和字符的大小写转换头文件 ctype.h函数列表函数类别 函数用途 详细说明字符测试 是否字母和数字 isalnum是否字母 isalpha是否控制字符 iscntrl是否数字 isdigit是否可显示字符(除空格外) isgraph是否可显示字符(包括空格) isprint是否既不转载 2013-09-02 22:56:02 · 608 阅读 · 0 评论 -
栈的应用之迷宫
栈是后进先出的,栈分为顺序栈和链栈:顺序栈是由一组地址连续的存储单元构成,依次存放从栈底到栈顶的数据元素;链栈是一组地址可不连续的存储单元构成,链栈的建立过程类似于采用前插法建立链表; 注意程序中栈的操作,Push(),Pop(),GetTop()等等。网上有一段利用栈完成的程序,可以拿来欣赏一下,首先感谢一下原作者提供这样的代码。#include using na原创 2013-09-09 15:11:36 · 791 阅读 · 0 评论 -
CString类的完美总结
①、CString 类对象的初始化:CString str;CString str1(_T("abc"));CString str2 = _T("defg"); TCHAR szBuf[] = _T("kkk");CString str3(szBuf);CString str4 = szBuf; TCHAR *p = _T("1k2");//TCHAR *转载 2013-09-03 08:51:17 · 596 阅读 · 0 评论 -
数组指针和指针数组
一 定义数组指针:数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动);指针数组:数组元素为指针的数组,其本质为数组。 二 举例 int a[3][4] 这个无需多说,就是一个二维数组。int (*p)[4] 就相当于int p[ ][4],它就是一个二维数组的指针,可以指向一个第二维度为4的二维数组。原创 2013-09-10 20:26:02 · 450 阅读 · 0 评论 -
c语言一个队列实现
队列是c语言中一个重要的数据结构之一,下面就是实现队列建立、插入、删除、清空、销毁等操作的代码。头文件 Queue.h#ifndef QUEUE_H_#define QUEUE_H_typedef int Item;typedef struct node{ Item data; struct node* next;}Node,*PNode;typedef struct转载 2013-09-13 10:25:08 · 4199 阅读 · 0 评论 -
C++中的vector
vector 是数组的一种类表示,它提供了自动内存管理功能,可以动态地改变vector对象的长度,并随着元素的添加和删除而增大和减小。它提供了对元素的随机访问。在尾部添加和删除元素的时间是固定的,但在头部或中间插入和删除元素的复杂度为线性时间。vector 作为一个类模板,可用来定义任意多种数据类型。vector 类型的每一种都指定了其保存元素的类型。vector之所以被认为是一个容器,是原创 2013-09-29 18:56:38 · 709 阅读 · 0 评论 -
java调用C/C++生成的dll动态链接库----借助JNI
参考教程:http://www.cnblogs.com/xiehy/p/3365682.html由于项目的需要,最近研究了java 调用DLL的方法,将如何调用的写于此,便于日后查阅:采用的方法是JNI:Java Native Interface,简称JNI,是Java平台的一部分,可用于让Java和其他语言编写的代码进行交互。下面是从网上摘取的JNI工作示意图转载 2017-06-06 10:12:39 · 1091 阅读 · 0 评论