c++
sunmenggmail
这个作者很懒,什么都没留下…
展开
-
const_cast
const_cast用于添加或者删除指针或者引用的const属性,但是对于删除const属性的功能有一些bug:可以构造结构体或者类的非const指针或者引用给新变量,但是原变量的const属性不变化,新变量可以修改对应的内容;但是如果是一个基本类型的const变量,譬如cosnt char *,const int等等,不会修改其内容。所以,还是应该遵从这样的原则:使用const_cast原创 2012-02-26 20:13:40 · 713 阅读 · 0 评论 -
c++数组初始化
int a[10];编译器可能默认将其全部置零,所以int a[10] = {0}和int a[10] = {1}一样不靠谱,只能保证0号元素被置为0或1,而其余元素可能会被置为0,所以要用memset另外需要注意的是,memset函数是逐字节进行填充,所以a一般为char *型。对于其它类型的a,可以填充的值有两个,0和-1。因为计算机中用二进制补码表示数字,0和二进制补码为全0原创 2012-02-29 11:21:38 · 843 阅读 · 0 评论 -
C++STL算法
说完了排序算法接下来就剩下数值算法(numeric algorithms)了.iota将一组递增的值赋值给迭代器区间内的元素#include #include #include using namespace std;void print(int x){ cout }int main(void){ int iArray[10];转载 2012-02-29 22:37:18 · 730 阅读 · 0 评论 -
强制转换const 引用
const int i = 1; int& j = (int&)i; j = 2;//i的值还是1int i = 1; int& j = (int&)i; j = 2; //i的值为2const int &i = 1;int& j = (int&)i; //看来强制类型转换的威力非同小可,const也不原创 2012-03-24 10:18:20 · 905 阅读 · 1 评论 -
c++调用Java以及string互转
//太能折腾了,一个下午终于c++可以调用java中的程序了#include #include #include #include #include #include #ifdef _WIN32#define PATH_SEPARATOR ';'#else#define PATH_SEPARATOR ':'#endifusing namespace std;/*C字原创 2012-03-08 18:59:36 · 6099 阅读 · 0 评论 -
c++dll生成和调用
转载:http://hi.baidu.com/new_day2009/blog/item/51e0c6ec1cd05adbb21cb16d.html生成Dll文件新建项目,选择Win32项目,工程名:09DllDemo 确定后,选择应用程序设置, 应用程序类型选择DLL(D),附加选项上选择 导出符号(X)(便于学习)。单击完成,完成工程创建。-----转载 2012-03-08 19:02:13 · 10621 阅读 · 2 评论 -
jni详解
最近作一个tiemsten数据库的项目,用到了jni技术。在这个项目中,我们用java来写界面和业务逻辑,用c语言写数据库odbc访问。单纯的odbc其实没有什么难的,但是在java和c之间进行数据传递是比较麻烦的事情。两者之间数据的传递有这样几种情况:java和c之间基本数据类型的交互,java向c传递对象类型,c向java返回对象类型,c调用java类。下面就这样几种情况分类说明。1、ja转载 2012-03-08 19:03:54 · 678 阅读 · 0 评论 -
vs2008 c++ 调用java
参考:http://zhuyx808.iteye.com/blog/460152计划第三篇写一个java安装程序实例(客户端无jre环境的安装包),以解决java程序(软件)安装不方便的问题,使java程序安装也傻瓜化。 直接进入正题: 完成本实例需要下列工具/环境: 1、java环境 2、c/cpp编辑器。windows下推荐用vs/vc++,我用的是vs2008。l原创 2012-03-08 16:03:51 · 3063 阅读 · 0 评论 -
解决Error spawning 'cmd.exe'的问题
在Visual Studio中,选择工具->选项->工程和解决方案->VC++目录 点击上方的像文件夹的按钮-新建行,然后在空白处添加cmd.exe所在的目录C:\Windows\System32\ (如果你是默认装在C盘的话)点击确定,就OK了。原创 2012-03-12 13:08:13 · 1474 阅读 · 0 评论 -
biset传参
templatevoid change(bitset &bs){bs.set(1);}int main(){ bitset bs1(10); bitsetbs2(20); change(bs1); change(bs2); system("pause");return 0;}只能用模板实现bitset的传参但是如果是普通类的模板函数,则原创 2012-03-12 18:38:49 · 734 阅读 · 0 评论 -
c指针
转自:http://blog.csdn.net/supermegaboy/article/details/4854965首先看看如下一个声明: int* ( *( *fun )( int* ) )[10]; 这是一个会让初学者感到头晕目眩、感到恐惧的函数指针声明。在熟练掌握C/C++的声明语法之前,不学习一定的规则,想理解好这类复杂声明是比较困难的。 C/C++所有转载 2012-03-28 15:38:31 · 453 阅读 · 0 评论 -
不能断点调试
1.首先试最常规的方法:Clean and then rebuild solution,但是没有解决2.进入Tools>Options,选择Debugging>General 却掉 Enable address-level debugging 选项,在去掉 Require source files to exactly match the original version.Okay原创 2012-03-13 17:22:09 · 504 阅读 · 0 评论 -
c++最大最小值
numeric_limits::max() is 2147483647numeric_limits::min() is -2147483648numeric_limits::max() is 1.79769e+308numeric_limits::min() is 2.22507e-308numeric_limits::min() 也是一个最小的原创 2012-03-14 10:05:18 · 2136 阅读 · 0 评论 -
malloc 和new 区别
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。 2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加转载 2012-03-31 15:48:48 · 422 阅读 · 0 评论 -
if else
出道多年来,头一个在编程上犯的sb问题if(ra==rb)//1if(xa==xb)//2++ans;elsemerge();按照python的编码方式,else是和第一个if搭配的。。。。在c++中else是和第二个if搭配。。。原创 2012-04-04 15:05:37 · 444 阅读 · 0 评论 -
微软暑期实习笔试题
A. const char *pContent; //pContent 是指针,指向的是const charB. char * const pContent;//pContet 首先是一个const 的变量,然后是一个指针,也就是说是一个const 的指针,指向charC. char const *pContent;//和A一样,因为const 可以放在类型前,也可以放在类型后原创 2012-04-12 21:09:30 · 1009 阅读 · 0 评论 -
typedef用法小结
来源一:Using typedef to Curb Miscreant Code Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮。 typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常转载 2012-04-12 21:44:47 · 464 阅读 · 0 评论 -
c++ 内存 继承
http://blog.csdn.net/randyjiawenjie/article/details/68298231.C++的虚函数是怎样实现的? C++的虚函数使用了一个虚函数表来存放了每一个虚函数的入口地址,这个虚函数表又使用一个虚函数指针来进行访问。通常,虚函数指针都放在对象模型的第一个位置存放,这样访问徐函数指针的速度最快,没有偏移量。通过虚函数指转载 2012-04-15 12:45:05 · 513 阅读 · 0 评论 -
c++虚函数表
C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2012-04-26 15:24:45 · 492 阅读 · 0 评论 -
字符串常量
转自:http://blog.csdn.net/haoel/article/details/1395358我相信,使用C/C++多年的人对下面这个字符串赋值语句都不会陌生吧。 char* p = "test"; 同时,我也相信,各位在使用这种语句后吃过很多苦头也不少吧?只要你想利用指针p来改变字符串的内容,你的程序都会转载 2012-04-26 15:43:55 · 785 阅读 · 0 评论 -
只在堆上或只在栈上定义对象
转自:http://blog.csdn.net/g5dsk/article/details/4775144代码:[cpp] view plaincopyprint?class OnlyHeapClass { public: OnlyHeapClass() { }转载 2012-04-26 09:48:20 · 749 阅读 · 0 评论 -
禁止拷贝构造
如果我们想禁止对象被复制,应该写一个private的复制构造函数(不能不写,不写会自动生成),但这样的话自己的成员函数和友元还是可以调用它,进一步的方法是只声明而不实现(这个可以通过编译)。这样的话,如果是外部调用,会编译错误,如果是自己的成员函数或友元调用,会链接错误。c++ primer还是要好好看 !!原创 2012-04-26 09:59:52 · 821 阅读 · 0 评论 -
sizeof
#include using namespace std;void func(char arg[]){ cout<<sizeof(arg)<<endl;}int main(){ char str[] = "hello"; cout<<strlen(str)<<endl; cout<<sizeof(str)<<endl; char *p = str; cout<<siz原创 2012-04-15 09:54:01 · 462 阅读 · 0 评论 -
c++实现多态的方法 虚表
转自:http://blog.csdn.net/jiangnanyouzi/article/details/37208071、c++实现多态的方法其实很多人都知道,虚函数在c++中的实现机制就是用虚表和虚指针,但是具体是怎样的呢?从more effecive c++其中一篇文章里面可以知道:是每个类用了一个虚表,每个类的对象用了一个虚指针。具体的用法如下:class A{原创 2012-04-15 11:38:53 · 872 阅读 · 0 评论 -
c++内存管理
转自:http://blog.csdn.net/zhanghefu/article/details/5003407[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,转载 2012-04-15 10:26:32 · 627 阅读 · 0 评论 -
c++ 面试题
转自:http://blog.csdn.net/odola/article/details/4408136char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc"; const char str4[] = "abc"; const char* str5 = "abc";co转载 2012-04-26 17:32:09 · 463 阅读 · 0 评论 -
stl中各种容器的自定义比较函数
class elem{public: elem(); elem(int aa):a(aa){}public: int a; int getA() { return a; }};class elem1{public: elem1(); elem1(int aa):a(aa){}public: int a; int getA() { return a;原创 2012-04-26 22:45:36 · 3939 阅读 · 0 评论 -
stl 容器
stl提供了三个最基本的容器:vector,list,deque。 vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此 它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间 进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新 申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vecto转载 2012-04-26 21:03:19 · 516 阅读 · 0 评论 -
c++继承
第一次在csdn写博客~~先看代码.hclass ad1{public: ad1() { cerr<<"ad1 construction\n"; } ~ad1() { cerr<<"ad1 deconstruction\n"; }};class ad2{public: ad2() { cerr<<"ad2 construction\n";原创 2012-02-26 14:01:02 · 635 阅读 · 0 评论 -
保存网站
电脑又卡了,先保存网址以:http://zhedahht.blog.163.com/blog/static/254111742007127104759245/http://blog.csdn.net/v_JULY_v?utm_source=weibolife为主线http://topic.csdn.net/t/20061008/22/5068262.html原创 2012-04-27 23:44:19 · 702 阅读 · 0 评论 -
宏和内联函数
转自:http://blog.csdn.net/fisher_jiang/article/details/2472210第一部分:宏为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函转载 2012-05-02 13:46:09 · 524 阅读 · 0 评论 -
指针和数组
首先明确一点,指针之间的加减不是简单的加减,而是只的是指针所指向元素个数的加减,也就是说是元素个数的偏移int *p11 = (int *)0xfff4;int *p12 = (int *)0xfff0;cout输出应该是4/4 =11. 一维数组int a[5];cout//output:20 4 4//a是一个数组,所以a的长度5原创 2012-05-04 15:26:33 · 431 阅读 · 0 评论 -
移位操作
如果X大于0并小于65536,用移位法计算X乘以255的值为:int a = -x+(xint b = (x1. x2. +-*/的优先级别 大于>原创 2012-05-05 10:22:48 · 436 阅读 · 0 评论 -
二维数组传参
一般而言,有两种传参方式:void fn(int p[][3],int n){for (int i=0;i{for (int j=0;j{cout}cout}}void fn1(int (*p)[3],int n){for (int i=0;i{for (int j=0;j{cout}cout}}原创 2012-05-04 19:41:29 · 473 阅读 · 0 评论 -
stl删除操作
vector ve,必须用iter = ve.erase(iter)删除其他list,map,set用 li.erase(iter++)删除原创 2012-05-28 15:54:14 · 671 阅读 · 0 评论 -
stringstream和cin
stringstream ss;ssssssss>>i>>j;coutoutput:153 6715367ss是一个流,所以153和67放在流中,但是这个流不会因为输出而变化,也就是说只能>把流里的东西删除如果要删除流里的东西,必须用ss.clear()ss.str("")下面是cin的一个小问题如果是按行原创 2012-05-29 22:43:01 · 1948 阅读 · 0 评论 -
程序的内存分布
一般而言,计算机程序由代码和数据组成.它所占用的内存区一般分为如下5种:1. 全局静态数据区: 存放全局变量和静态变量(包括全局和局部的静态变量). 2.常量数据区.存放常量字符串等,内容不可修改.3.代码区: 存储程序代码.4.堆.用户控制的存储区,存储动态产生的数据.new.malloc都是在堆上申请空间,分别用delete,free来释放申请的空间,否则容易造转载 2012-06-01 09:57:17 · 489 阅读 · 0 评论 -
虚函数原理1
部分参考:http://blog.csdn.net/devilkin64/article/details/5939613虚函数表的建立是取决于定义类的时候是否包含虚函数,如果有类函数/ 方法声明为虚,则改类会建立一张虚表.在网上找到一个牛人用汇编的方法论证虚 表是存放在常量区内(具体论证就省略,否则就扯远了). 继承类会同样建立一张虚表,并将覆盖虚表中父类虚函数的地址.在编译阶段,编译原创 2012-06-01 00:30:11 · 632 阅读 · 0 评论 -
浅谈C++对象内存布局
http://yalung929.blog.163.com/blog/static/20389822520123910561654/最简单的类先从一个简单的类开始吧。如下,此简单类,非常简单,两个int成员,通过printf很容易了解到它的内存布局,本质就是一个C结构体,两个成员依次排列。对象:|成员1 | 成员2 | 1: #in转载 2012-06-01 13:09:59 · 2256 阅读 · 0 评论 -
单体模式singleton
在c++实现单体模式和c#,java有些不同.hclass Param{public: static Param& GetIntance() { return m_param; } static Param m_param;}.cppParam Param::m_param;看起来比高级语言的单体模式还简单,不用考虑到多线原创 2012-06-01 15:31:20 · 765 阅读 · 0 评论