
CC++编程语言
文章平均质量分 58
zslInSz
这个作者很懒,什么都没留下…
展开
-
C++ delete和delete[]区别
1、int *p = new int 是分配一个单元,int *p = new int[100]是分配100个单元2、delete p 是删除释放一个单元,delete [] p 是释放 多个单元,具体的数据目是查系统的分配表得到的;3、对于内置类型来说,delete和delete []是一样的。最本质的区别: new和delete都是两步操作,分配(释放)堆内存和调用原创 2012-10-08 12:33:13 · 396 阅读 · 0 评论 -
如何最快测试CPU是大端机还是小端机?
传说这是一道很经典的面试题。很多童鞋都秉承正常人的思维,老老实实写下了倒转判断的代码。谁会想到用union呢?union有一个特性:其存放顺序是所有成员都从低地址开始存放。有没有一点灵感?其实什么是巧妙,就是利用融会贯通罢了。代码如下:#include using namespace std;int checkCPU();int main()转载 2013-01-31 17:24:52 · 715 阅读 · 0 评论 -
面向对象的static
1、静态数据成员在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员。先举一个静态数据成员的例子。//Example 5#include class Myclass{public:Myclass(int a,int b,int c);void GetSum();private:int a,b,c;static int Sum;/原创 2013-02-01 17:01:41 · 377 阅读 · 0 评论 -
while条件判断
string text_word; while (cin >> text_word) vec.push_back(text_word);判断条件是cin>>value 它具有从标准输入读取下一个数并且将读入的值保存在value中的效果。输入操作符返回其左操作数。while条件测试输入操作符的返回结果。意味着测试cin。当我们使用istream对象作为条件,原创 2013-02-20 11:45:22 · 1446 阅读 · 0 评论 -
明智地使用私有继承
C++将公有继承视为 "是一个" 的关系。它是通过这个例子来证实的:假如某个类层次结构中,Student类从Person类公有继承,为了使某个函数成功调用,编译器可以在必要时隐式地将Student转换为Person。这个例子很值得再看一遍,只是现在,公有继承换成了私有继承:class Person { ... };class Student: //原创 2013-02-21 10:20:45 · 260 阅读 · 0 评论 -
C++ 实现内存池
内存池(Memory Pool)是一种内存分配方式。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做原创 2013-03-01 22:19:32 · 432 阅读 · 0 评论 -
Linux平台上用C++实现多线程互斥锁
在上篇用C++实现了Win32平台上的多线程互斥锁,这次写个Linux平台上的,同样参考了开源项目C++ Sockets的代码,在此对这些给开源项目做出贡献的斗士们表示感谢!下边分别是互斥锁类和测试代码,已经在Fedora 13虚拟机上测试通过。Lock.h#ifndef _Lock_H#define _Lock_H#include //锁接口类class IL转载 2013-03-30 23:36:14 · 504 阅读 · 0 评论 -
C ++ 函数后面加throw()的作用
Following declaration gives a message to the user of your class: my method doesn't throw any exception. Don't bother to put a try/catch block around itwhen you use it.void A::foo() throw();转载 2013-03-21 19:26:26 · 608 阅读 · 0 评论 -
C++ 关键字typeid
转载网址:http://www.cppblog.com/smagle/archive/2010/05/14/115286.aspx在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或转载 2013-04-12 11:27:20 · 444 阅读 · 0 评论 -
C++的深拷贝与浅拷贝
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include using namespace std;class CExample {private: int a;public: CExample(int b)转载 2013-02-27 20:08:26 · 523 阅读 · 0 评论 -
C++ 类型转换
C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T函数风格(Function-style)强制转型使用这样的语法: T(exdivssion) // cast exdivssion to be of type T 这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题。我把这两种形原创 2013-01-04 17:31:50 · 306 阅读 · 0 评论 -
调用赋值运算符 和 拷贝构造函数
这个地方老是搞模糊,今天特记下来。1、如果在对象声明的时候 eg:Cstring a = b;此时是调用拷贝构造函数,因为这时对象a还没有创建,需要调用构造函数来创建对象。拷贝构造函数还是构造函数的一种,只不过其传递的参数是对象本身类型的数据2、对象已经创建完毕,eg Cstring a; a = b;这时调用的是赋值运算符,其实C++ 都提供了默认的拷贝构造函数和赋值运算原创 2013-07-31 08:57:40 · 671 阅读 · 0 评论 -
string类的实现
#include#include#include#includeusing namespace std;class CMyString{ friend std::ostream& operator<<( std::ostream& os, const CMyString& str); private: char* m_转载 2013-07-31 08:47:36 · 500 阅读 · 0 评论 -
C++ 智能指针的使用
在程序过程中有时需要new 出来一个指向对象的指针,当时这样就会造成一个问题就是有的指针没有进行删除操作,而且有时对指针进行copy,导致多个指针指向同一个对象,对其中的一个删除的时候就会造成别的指针成为悬垂指针,再次删除就会造成程序的崩溃。在这个时候能够很多的解决问题的方法就是使用智能指针。指针指针本质是个模板类,使用指针作为参数来生成一个对象,使用其来管理指针的回收,指针的引用计数等问题,原创 2013-04-26 12:21:36 · 541 阅读 · 0 评论 -
声明和定义的区别
我先说声明和定义的区别吧,这个包含了所有类型的变量,包括类类型。 int a;是一个整型变量的声明,而int a = 1;就是一个声明再加定义。而char* p;是一个声明,而 p = NULL,就是变量的定义。 class time{};是一个类的声明,因为这样写一般只声明了类里的成员变量(没有初始化的,也不能初始化,除了常量),还有函数的声明。函数声明也就是只有函数名,没有原创 2013-02-18 09:51:16 · 418 阅读 · 0 评论 -
链表头结点作用
转自:http://blog.chinaunix.net/space.php?uid=20754930&do=blog&id=3336495数据结构中,在单链表的开始结点之前附设一个类型相同的结点,称之为头结点。头结点的数据域可以不存储任何信息,头结点的指针域存储指向开始结点的指针(即第一个元素结点的存储位置)。作用1、防止单链表是空的而设的.当链表为空的时候,带头结点的头指针就指向头转载 2014-02-14 12:48:45 · 4281 阅读 · 0 评论 -
c++ 创建类时 内部函数的选择
假设f是想正确声明的函数,c是和它相关的类:虚函数必须是成员函数。如果f必须是虚函数,就让它成为c的成员函数。operator>>和operator>或operatoreg, friend ostream& operator只有非成员函数对最左边的参数进行类型转换。如果f需要对最左边的参数进行类型转换,让f成为非成员函数。如果f还需要访问c的非公有成员,让f成为c的友元函原创 2014-02-19 14:51:04 · 504 阅读 · 0 评论 -
C、C++的一些基本概念
1、常量表达式 :常量表达式是编译器在编译时就能够计算出结果的整型表达式。整型字面值常量是常量表达式,正如一个通过常量表达式自我初始化的 const 对象也是常量表达式一样。2、用 class 和 struct 关键字定义类的唯一差别在于默认访问级别:默认情况下,struct 的成员为 public,而 class 的成员为 private。3、inline函数和普通函数的区别,inlin原创 2012-12-10 11:42:27 · 413 阅读 · 0 评论 -
C++ 类的学习,创建
#ifndef PERSON_H_INCLUDED#define PERSON_H_INCLUDED#include #includeusing namespace std;class person{ public: person():age(12),name("wangyueyue"){};//类的无参数构造函数 用来默认初始化列表成员原创 2012-11-18 21:31:34 · 392 阅读 · 0 评论 -
模板编程 学习
模板分为函数模板和类模板1、函数模板是一个独立于类型的函数,可作为一种方式,产生函数的特定类型版本。模板定义以关键字 template 开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参的列表,形参之间以逗号分隔。模板形参表不能为空。模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。非类型形参跟在类型说明符之后声明。类型形参跟在关键字 class 或原创 2012-12-12 14:44:38 · 1798 阅读 · 0 评论 -
Hash Table 哈希表介绍
一.定义:哈希表是为了便于快速搜索而组织的键/值组合的集合。Hash Table是一种数组,可以用任意简单变量值来访问其元素,这种数组叫做关联数组,也叫哈希表。键/值对的集合。二.优点:哈希表最大的优点就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间;而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的情况下,用空间换时间的做法是值得的。另外,编码比较容易也是它转载 2012-10-09 13:55:34 · 560 阅读 · 0 评论 -
功能强大的sscanf函数学习
转http://www.2cto.com/kf/201110/106631.html 函数原型: Int sscanf( const char * src, const char * format, ...);int scanf( const char * format, ...);这两个函数很相似,只是第一个函数以src作为输入,而第二个函数以标准输入STDIN读取输入;转载 2012-10-09 09:07:32 · 542 阅读 · 0 评论 -
fatal error C1189:
今日写程序在win32中用CFiledialog模块来打开文件突然发现报错。提示:#error Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d] 原因:1、使用MFC原创 2012-10-11 10:03:29 · 572 阅读 · 0 评论 -
一道笔试的总结
int* fun3(int a){ static int ret; ret = a; return &ret;}int* fun4(int a){ return &a;}int main(){ printf("%d", *fun3(2)-*fun3(1)); printf("%d", *fun4(2)-*fun4(1)); re原创 2012-10-11 16:15:41 · 349 阅读 · 0 评论 -
TinyXML的简单应用
第一次应用TinyXML时想当然的认为会和别的库一样,是一个dll和一个头文件,其实不然。1、新建自己的C++ 工程2、把tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp加入到工程当中由于TinyXML是由标准C++写的,对于那些在MFC中添加的会出现一个C1010的致命错误原创 2012-10-17 10:31:19 · 615 阅读 · 0 评论 -
VS2008 快捷键大全
转自http://www.jscode.cn/develop/v444651 转到定义: f12;2 设置书签:ctr+k+k;3 设置任务: //todo:something,查看任务ctrl+w+t;4 查找:ctrl+ f, ctrl+shift+f;5 强迫智能感知:ctrl+j;6 强迫智能感知显示参数信息:ctrl-shift-空格;7 格式化整个块:ctr转载 2012-10-30 11:08:17 · 525 阅读 · 0 评论 -
VC++ 6.0以及VS2008 UNICODE工程设置
问题发现原因: 由于软件要支持多种语言,其中必要包括中文,于是要用到宽字符,也就是unicode编码的字符。刚开始在console下面写一个小程序没有问题。于是打算移植到MFC上去,于是悲剧的出现了问题。问题描述: 1、error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用原创 2012-11-02 15:30:32 · 2282 阅读 · 0 评论 -
一个修改正在使用的程序的窗口Title的程序
在VC6.0++ MFC下使用没有问题CString strFind = L"notepad.exe"; // 替换的文字 CString strReplace = L"123"; HANDLE hProcessSnap = NULL; PROCESSENTRY32 pe32 = {0}; DWORD m_dwProcessId;转载 2012-10-25 11:05:18 · 212 阅读 · 0 评论 -
一个是用tinyxml遍历xml的源码
// XMLConsole.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "tinyxml.h"// ———————————————————————-// STDOUT输出和缩进实用函数// ———————————————————————-const unsigned int NUM_INDENTS_PER_原创 2012-10-18 09:47:37 · 2252 阅读 · 0 评论 -
深入理解C函数传递参数的过程
1,大致分为传值和传地址,不过总体说来都是传值,地址也是一种数值。传递参数都是拷贝数据进行传递的。这是编译器以及函数调用约定决定的。首先了解一下主要的函数调用约定__stdcall,__cdecl,__fastcall,__thiscall,__nakedcall,__pascal 1.从右到左依次入栈:__stdcall,__cdecl,__thiscall原创 2012-11-18 22:18:54 · 842 阅读 · 0 评论 -
MFC程序获得命令行输入
一个unicode工程,需要处理很多文件,开始的时候没有做成console程序,发现程序写好之后出来了两个问题。程序通过CFileDialog来打开文件夹获得文件路径的。但是一个个打开太麻烦了。于是修改程序使程序接受命令传递的参数。这样就可以通过批处理来完成任务了。方法1: for (int i=0;i<__argc;i++){__argv[i];将依次得到C:\test\原创 2012-11-08 12:46:02 · 1693 阅读 · 0 评论 -
派生类到基类的转换 和基类到派生类的转换
我们从表中可以看到下面几点,1)覆盖的f()函数被放到了虚表中原来父类虚函数的位置。2)没有被覆盖的函数依旧。 这样,我们就可以看到对于下面这样的程序, Base *b = new Derive(); b->f(); 发现 其实b就是一个指向派生类中的基类部分的指针。 派生类到基类的转换原创 2012-12-06 10:53:15 · 5132 阅读 · 1 评论 -
C/C++ STL MAP用来处理文件中重复的相同的一行数据的问题
#include #include #include #include int wmain(int argc, wchar_t *argv[ ], wchar_t *envp[ ]){ std::mapsingel_map; CStdioFile File; File.Open(argv[1],CFile::modeReadWrite); wchar_t M原创 2012-11-23 14:24:18 · 4061 阅读 · 0 评论 -
转至windows核心编程 线程的基础知识
第6章 线程的基础知识理解线程是非常关键的,因为每个进程至少需要一个线程。本章将更加详细地介绍线程的知识。尤其是要讲述进程与线程之间存在多大的差别,它们各自具有什么作用。还要介绍系统如何使用线程内核对象来管理线程。与进程内核对象一样,线程内核对象也拥有属性,我们将要观察许多用于查询和修改这些属性的函数。此外还要介绍可以在进程中创建和生成更多的线程时所用的函数。第4章介绍了进程是由两个部分构转载 2012-11-26 09:35:37 · 566 阅读 · 0 评论 -
消息分流器、子控件宏和API宏
消息分流器定义在Microsoft Visual C++中提供的Wi n d o w s X . h文件里。通常在Wi n d o w s . h文件之后紧接着包含这个文件。Wi n d o w s X . . h文件就是一组# d e f i n e指令,建立了一组供我们使用的宏。Wi n d o w s X . h的宏实际上分为三组:消息分流器、子控件宏和A P I宏。这些宏以下述的方式为我们原创 2012-12-14 09:28:16 · 370 阅读 · 0 评论 -
解析#pragma指令
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #Pragma Para 其中转载 2012-12-15 08:54:25 · 420 阅读 · 0 评论 -
标准模板库 vector源码学习
// TEMPLATE CLASS _Vector_const_iteratortemplate<class _Ty, class _Alloc> class _Vector_const_iterator : public _Ranit<_Ty, typename _Alloc::difference_type, typename _Alloc::const_pointe原创 2013-02-20 10:11:57 · 1860 阅读 · 0 评论