随笔分类 -  C++

上一页 1 2 3 下一页
不能从const char *转换为LPCWSTR --VS经常碰到
摘要:不能从const char *转换为LPCWSTR在VC 6.0中编译成功的项目在VS2005 vs2005、vs2008、vs2010中常会出现类型错误。经常出现的错误是:不能从const char *转换为LPCWSTR如使用MessageBox(hwnd,"TEST",NULL,0)就会报错,如果使用强制转换(LPCWSTR)"TEST",虽然能够通过,但是编码会出错。可行的办法是使用 _T("TEST")转换,或者TEXT("TEST" )都可以MessageBox(hwnd,TEXT("TEST 阅读全文
posted @ 2014-03-07 14:46 可笑痴狂 阅读(35443) 评论(0) 推荐(3)
C++ 学习路线和看法
摘要:C++ 学习路线和看法原文地址:http://shundacao.blog.163.com/blog/static/1340404812010101982751101/C++大体分为C++的基本知识,template C++, Object-Oriented C++, STL四部分。1.谭浩强的《C++的程序设计》是入门的首选,讲的易懂,对那些初学者来说是非常不错的选择。虽然这本书没有概括到C++的全部内容,但足可以把你引进C++的殿堂门口感受感受。2.上一本书的缺少了模板,面向对象和STL部分,这时候可以看看THINKING IN C++,你会有种登堂入室的感觉,体会到C++的奇妙和大智慧。 阅读全文
posted @ 2013-12-11 19:21 可笑痴狂 阅读(6038) 评论(0) 推荐(2)
文本文件与二进制文件区别
摘要:文本文件与二进制文件区别原文地址:http://www.cnblogs.com/zhangjiankun/archive/2011/11/27/2265184.html一、文本文件与二进制文件的定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码。 从上面可以看出文本文件基本上是定长编码的(也有非定长的编码如UT. 阅读全文
posted @ 2013-11-28 10:00 可笑痴狂 阅读(413) 评论(0) 推荐(0)
GetTextMetrics与GetTextExtent的区别
摘要:GetTextMetrics:获取当前字体的信息GetTextExtent:获取特定的字符串在屏幕上所占的宽度和高度CDC::GetTextMetrics作用:返回当前设备描述表中的当前所用的字体的信息函数原型:BOOL GetTextMetrics( LPTEXTMETRIC lpMetrics) const;参数:lpMetrics (是一个指针)返回指向TEXTMETRIC 结构的一个数据。返回值:非零值成功要求:包含头文件: afxwin.hCDC::GetTextExtentCall this member function to compute the width and heig 阅读全文
posted @ 2013-11-26 17:10 可笑痴狂 阅读(1170) 评论(0) 推荐(0)
C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
摘要:栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。堆可以动态地扩展和收缩。 自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。 全局/静态存储区,全局变... 阅读全文
posted @ 2013-11-26 17:06 可笑痴狂 阅读(405) 评论(0) 推荐(0)
模板
摘要:1、定义函数模板 1 #include 2 #include 3 using namespace std; 4 5 template 6 int compare(const T &v1, const T &v2) 7 { 8 if(v1 inline T min(const T&, const T&);3 // error: incorrect placement f inline specifier4 inline template T min(const T&, const T&);定义多个模板形参: 1 /** 2 * 编写一个函数模板,接 阅读全文
posted @ 2013-10-08 17:51 可笑痴狂 阅读(449) 评论(0) 推荐(0)
C++类中的访问权限问题
摘要:纠结的东西:private,public,protected方法的访问范围.(public继承下)private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数A.在无继承的情况下,类内部可以随意访问,即使是private;类外部无法访问protected/private成员 .B.在有继承的情况下, (先确定类继承方 阅读全文
posted @ 2013-09-28 10:48 可笑痴狂 阅读(21080) 评论(0) 推荐(0)
C++抽象类
摘要:一、纯虚函数定义. 纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”二、引入原因:1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。 为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重载以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生.. 阅读全文
posted @ 2013-09-28 09:45 可笑痴狂 阅读(41002) 评论(3) 推荐(2)
句柄类与继承
摘要:1 /** 2 * C++ 面向对象编程的一个颇具讽刺意味的地方是:不能使用对象支持面向对象编程, 3 *相反,必须使用指针或引用,例如: 4 */ 5 void get_prices(Item_base object, const Item_base *pointer, const Item_base &reference) 6 { 7 //下边的两个调用在运行时进行动态绑定 8 cout net_price(1) 7 8 inline bool compare(const Sales_item &lhs, const Sales_item &rhs) 9 {10.. 阅读全文
posted @ 2013-09-28 08:42 可笑痴狂 阅读(755) 评论(0) 推荐(0)
虚函数、继承
摘要:所谓虚函数是指: 在类中被声明为virtual的成员,基类希望这种成员在派生类中重定义。除了构造函数外,任意非static成员都可以为虚成员。保留字 virtual 只在类内部的成员函数声明中出现,不能用在类定义体外部出现在函数定义上。protected标号: protected为受保护的访问标号,protected成员可以被该类的成员、友元和派生类成员(非友元)访问,而不可以被该类型的普通用户访问。而private成员,只能被基类的成员和友元访问,派生类不能访问。 派生类只能通过派生类对象访问其基类的protected成员,派生类对其基类类型对象的protected成员没有特殊访问权限... 阅读全文
posted @ 2013-09-25 09:27 可笑痴狂 阅读(3013) 评论(0) 推荐(0)
重载操作符与转换
摘要:1。在什么情况下重载操作符与内置操作符不同?在什么情况下重载操作符与内置操作符相同?不同:重载操作符必须具有至少一个类类型或枚举类型的操作数。重载操作符不保证操作数的求值顺序,例如对 && 和 || 的重载版本不再具有“短路求值”的特性,两个操作数都要进行求值,而且不规定操作数的求值顺序。相同:对于优先级和结合性及操作数的数目都不变。注意:操作符定义为非成员函数时,通常必须将它们设置为所操作类的友元示例: 1 class Sales_item 2 { 3 friend std::istream& operator >> ( std::istream& 阅读全文
posted @ 2013-09-22 16:12 可笑痴狂 阅读(1057) 评论(0) 推荐(0)
智能指针(使用计数)、定义值型类
摘要:1、什么是使用计数? 使用计数是复制控制成员中使用的编程技术。将一个计数器与类指向的对象相关联,用于跟踪该类有多少个对象共享同一指针。创建一个单独类指向共享对象并管理使用计数。由构造函数设置共享对象的状态并将使用计数置为1。每当由复制构造函数或赋值操作符生成一个新副本时,使用计数加1。由析构函数撤销对象或作为赋值操作符的左操作数撤销对象时,使用计数减少1。赋值操作符和析构函数检查使用计数是否已减至0,若是,则撤销对象。2、什么是智能指针?智能指针如何与实现普通指针行为的类相区别? 智能指针是一个行为类似指针但也提供其他功能的类。这个类与实现普通指针行为的类区别在于:智能指针通常接受指向动态.. 阅读全文
posted @ 2013-09-22 10:16 可笑痴狂 阅读(1268) 评论(0) 推荐(0)
C++_友元函数总结(转)
摘要:原文地址:http://blog.csdn.net/insistgogo/article/details/66086721、为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率 具体来说:为了使其他类的成员函数直接访问该类的私有变量 即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数 优点:能够提高效率,表达简单、清晰缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数。2、什么时候使用友元函数:1)运算符重载的某些场合需要使用友元。2)两个类要共享数据的时候3、怎么使用友元函数:友元函数的参数: 因为友元函数没有this 阅读全文
posted @ 2013-09-20 21:41 可笑痴狂 阅读(5400) 评论(0) 推荐(0)
赋值操作符、复制构造函数、析构函数、static成员练习
摘要:1 /** 2 * 定义一个Employee类,包含雇员名字和一个唯一的雇员标识,为该类定义默认构造函数和参数为表示 3 * 雇员名字的string构造函数。如果该类需要复制构造函数或赋值操作符,实现这些函数 4 * 5 * 注意:static数据成员必须在类定义体的外部定义(正好一次),static成员不是通过类构造函数进行初始化 6 * 而是应该在定义时进行初始化。 7 * (保证对象正好定义一次的最好方法就是将static数据成员的定义放在包含类的非内联成员函数定义的文件中) 8 * static数... 阅读全文
posted @ 2013-09-19 07:54 可笑痴狂 阅读(733) 评论(0) 推荐(0)
为什么static数据成员一定要在类外初始化?(转)
摘要:1.避免重复定义和初始化>说在类外定义和初始化是保证static成员变量只被定义一次的好方法。但,为什么static const int就可以在类里面初始化呢?想起C中一个函数里定义一个static变量是为了保证只初始化一次。那么,是否可以这样理解:static数据成员在类外定义和初始化是为了保证只被定义和初始化一次,这样编译器就不必考虑类的函数里面第一个对static变量的’=’操作是赋值还是初始化了。static const int可以在类里面初始化,是因为它既然是const的,那程序就不会再去试图初始化了。而且,>说static const int也必须在类外定义,类里面的只 阅读全文
posted @ 2013-09-17 22:55 可笑痴狂 阅读(12129) 评论(0) 推荐(4)
构造函数的初始化列表
摘要:1 /** 2 *有些成员必须在构造函数初始化列表中进行初始化。对于这样的成员,在构造函数体重对它们赋值不起作用。 3 *没有默认构造函数的类类型的成员,以及const或引用类型的成员,不管是哪种类型,都必须在构造函数初始化 4 *列表中进行初始化 5 */ 6 class ConstRef 7 { 8 public: 9 ConstRef(int ii);10 private:11 int i;12 const int ci;13 int &ri;14 };15 16 //错误做法17 Cons... 阅读全文
posted @ 2013-09-17 11:12 可笑痴狂 阅读(336) 评论(0) 推荐(0)
再谈迭代器
摘要:一、插入迭代器 1 /** 2 解释三种插入迭代器的区别。 3 区别在于插入的元素的位置不同: 4 back_inserter,使用push_back实现在容器末端插入。 5 front_inserter, 使用push_front实现在容器前端插入。 6 inserter,使用insert实现插入,它还带有第二个实参:指向插入起始位置的迭代器 7 */ 8 9 #include 10 #include 11 #include 12 #include 13 14 using namespace std;15 16 int main()17 {18 v... 阅读全文
posted @ 2013-09-15 18:13 可笑痴狂 阅读(411) 评论(0) 推荐(0)
算法函数练习
摘要:find:#include #include #include using namespace std;int main(){ int a[10]={0,1,2,3,4,5,6,7,8,9}; size_t a_size = sizeof(a)/sizeof(int); list li(a, a+a_size); list::iterator itor1, itor2; for(itor1 = li.begin(); itor1 != li.end(); ++itor1)//打印:0 1 2 3 4 5 6 7 8 9 cout 2 #include 3 #include //cou... 阅读全文
posted @ 2013-09-12 11:59 可笑痴狂 阅读(292) 评论(0) 推荐(0)
map练习
摘要:1 /* 2 编写程序统计并输出所读入的单词出现的次数 3 4 */ 5 /* 6 //代码一:---用map索引实现惊人的简练 7 #include 8 #include 9 10 using namespace std;11 12 int main()13 {14 map word_cnt;15 string word;16 while(cin >> word)17 {18 ++word_cnt[word];//如果查找键值word不存在,那么map中就会插入键值为word的新元素,同时用值初始化或默认构造函数初始化19 ... 阅读全文
posted @ 2013-09-10 10:08 可笑痴狂 阅读(473) 评论(0) 推荐(0)
指针的引用练习
摘要:1 #include 2 #include 3 4 using namespace std; 5 6 void ptrswap(int *&v1, int *&v2)//交换指针所指的地址 7 { 8 cout << endl; 9 cout << *v1 << "\t\t" << *v2 << endl;10 int *tmp = v1;11 v1 = v2;12 v2 = tmp;13 cout << *v1 << "\t\t" << *v 阅读全文
posted @ 2013-09-10 10:04 可笑痴狂 阅读(279) 评论(0) 推荐(0)

上一页 1 2 3 下一页