C++基础
Karen_Lh
1234
展开
-
C++中delete和delete[]的区别
一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论。做个备份,以免丢失。 C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2)转载 2015-10-20 16:06:33 · 301 阅读 · 0 评论 -
vs2010 问题 >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
http://www.cnblogs.com/newpanderking/articles/3372969.html>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏问题说明:当安装VS2012之后,原来的.NET 4.0会被替换为.NET 4.5。卸载VS2012时,不会恢复.NET 4.0。l 当VS201转载 2016-02-23 17:49:25 · 380 阅读 · 0 评论 -
GetWindowRect和GetClientRect
一:关于坐标 MFC中绘图时经常涉及到坐标计算,GetWindowRect和GetClientRect这两个函数,是获取逻辑坐标系中窗口或控件(其实也是窗口)大小和坐标的常用函数了,有什么不一样的?先说说什么叫逻辑坐标?讲到逻辑坐标,它相对的一个概念是设备坐标,是为了屏蔽掉不同设备属性差别而设置的抽象坐标系,说白了,就是独立于设备坐标的统一接口,程序员不需要去在具体的设备上进行绘图操作,而只需要在转载 2016-04-27 16:15:06 · 438 阅读 · 0 评论 -
前缀、中缀、后缀表达式
前缀、中缀、后缀表达式它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。举例: (3 + 4) × 5 - 6 就是中缀表达式 - × + 3 4 5 6 前缀表达式 3 4 + 5 × 6 - 后缀表达式中缀表达式(中缀记法) 中缀表达式是一种通用的算术转载 2016-09-09 16:53:22 · 184 阅读 · 0 评论 -
虚继承/虚基类
如果一个派生类D有多个直接基类B、C,而这些直接基类又有一个共同的基类A 代码 1:class A{public: A(){cout<<"A构造函数!"<<endl;} void out(){cout<<"A out"<<endl;} int flag;};class B : public A{public: B(){cout<<"B构造函数!"<<en原创 2016-09-11 18:08:22 · 350 阅读 · 0 评论 -
C++虚函数表
http://blog.csdn.net/haoel/article/details/1948051///虚函数表保存了虚函数的地址,虚函数表相当于一个指针数组class Base {private://非公有虚函数同样会存在子类的虚函数表中 int num; void real() {cout<<"Base::real"<<endl;} virtual void f()原创 2016-09-11 22:41:59 · 221 阅读 · 0 评论 -
关于构造函数的理解
代码 1(父类和子类都自定义构造函数):class father {public: father(int agee):age(agee) { cout<<"父类构造函数!"<<age<<endl; } int age;};class son : public father{public: son(int agee):father(a原创 2016-09-10 10:36:22 · 735 阅读 · 0 评论 -
C++中二维数组的动态创建与处理
C++中用new动态创建二维数组的格式一般是这样:TYPE (*p)[N] = new TYPE [][N];其中,TYPE是某种类型,N是二维数组的列数。采用这种格式,列数必须指出,而行数无需指定。在这里,p的类型是TYPE*[N],即是指向一个有N列元素数组的指针。还有一种方法,可以不指定数组的列数:int **p;p = new int*[10]; //注意,int*[10]表示一个有转载 2016-09-02 09:13:38 · 1210 阅读 · 0 评论 -
单例模式
单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。 单件模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。图1单例模式(Singleton)结构图单例模式(Singleton)是几个创建模式中最对立的一个,它的主要特点不是根据用户程序调用生成一个新的实例,转载 2015-10-04 17:23:18 · 361 阅读 · 0 评论 -
String 类的实现 以及 Strcpy、Strcat函数的实现
class Stringg{public: Stringg(const char *str = NULL); Stringg(const Stringg &other); ~Stringg(); Stringg & operator = (const Stringg& other);private: char *m_data;};Stringg::Str原创 2016-09-20 22:04:02 · 757 阅读 · 0 评论 -
理解C++ dynamic_cast
在面向对象程序设计中,有时我们需要在运行时查询一个对象是否能作为某种多态类型使用。与Java的instanceof,以及C#的as、is运算符类似,C++提供了dynamic_cast函数用于动态转型。相比C风格的强制类型转换和C++ reinterpret_cast,dynamic_cast提供了类型安全检查,是一种基于能力查询(Capability Query)的转换,所以在多态类型间进行转换转载 2016-03-17 22:39:35 · 287 阅读 · 0 评论 -
非静态成员引用必须与特定对象相对
意思就是引用非静态成员前应该先声明该类的对象。 比如类A这样定义class A{private:int n;}要使用n就要先这样声明A的对象A a;a.n=1转载 2015-10-03 11:57:16 · 17098 阅读 · 2 评论 -
基类指针指向派生类对象
派生类对象也“是”基类对象,但两者不同。派生类对象可以当做基类对象,这是因为派生类包含基类的所有成员。但是基类对象无法被当做成派生类对象,因为派生类可能具有只有派生类才有的成员。所以,将派生类指针指向基类对象的时候要进行显示的强制转换,否则会使基类对象中的派生类成员成为未定义的。总结:基类指针和派生类指针指向基类对象和派生类对象的4中方法:1. 基类指针指转载 2015-10-19 17:55:20 · 5546 阅读 · 1 评论 -
auto_ptr智能指针
http://blog.csdn.net/effective_coder/article/details/8733652auto_ptr的设计动机:对于一般的常规指针,在动态分配内存时需要手动的delete掉所占内存,但是难免有疏忽的时候,那么将会对程序造成致命的危险,所以auto_ptr智能指针便应运而生,他本身是一个对象,因为具有常规指针的特点,所以叫做转载 2015-10-18 10:33:05 · 262 阅读 · 0 评论 -
C++中 const 的用法
http://blog.csdn.net/Eric_Jo/article/details/4138548转载 2015-10-08 09:00:51 · 313 阅读 · 0 评论 -
(void**)&a
1、(void**)&a表示什么意思?答:强制类型转换取得变量的地址并且强制转换成无类型地址的指针,即一个指针,指向一个无类型地址的指针的地址。把 &a 指向的内存空间的内容转换为 void*将 &a 转换为一个指向 void* 类型的指针,即 (void* *)&a2、VOID ** ppbData,[out] VOID* pointer to a memory转载 2015-10-08 08:21:41 · 1094 阅读 · 0 评论 -
堆内存分配
1、 堆内存 前面已经讲过,程序在内存中有四个区域,代码区、全局数据区、栈区和堆区。全局数据区、栈区都是静态分配区域。这里将介绍用于动态分配的区域--堆(heap)。 堆是程序运行时动态使用的一个内存空间。如果要在堆中的分配内存空间,必须使用特定的函数和操作符。另外,若不再需要分配的空间则必须释放。2、 用malloc函数获得堆内存 Visual C++转载 2015-10-07 22:52:44 · 840 阅读 · 0 评论 -
vector及各种容器详解
http://blog.csdn.net/xgx198831/article/details/7289371该部分文章转载自:http://www.deuxmille.org/archives/1470在STL中基本容器有: string、vector、list、deque、set、mapset 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进转载 2015-10-07 22:40:48 · 894 阅读 · 0 评论 -
一级指针还是二级指针作函数参数
一级指针存放变量的地址,指向的值是变量的内容。如int* p={1,2,3}, p=数组的首地址,*p=数组的第一个值; 二级指针存放一级指针的地址,指向一级指针。如int*p ={1,2,3}, int**pp=&p,pp=指针p的首地址,*pp=数组的首地址,**pp=数组第一个值1。 在作为参数传递时什么时候用一级指针,什么时候用二级指针? 一级指针作为参数传递时,转载 2015-10-06 16:25:02 · 1873 阅读 · 0 评论 -
一级指针还是二级指针作函数参数(2)
程序1:void main() { char *p=NULL; myMalloc(p); //这里的p实际还是NULL,p的值没有改变,为什么? if(p) free(p); } void myMalloc(char *s) //我想在函数中分配内存,再返回 { s=(char *)转载 2015-10-06 09:00:20 · 1986 阅读 · 0 评论 -
vector<int>::iterator和vector<int*>::iterator还有vector<int>*的区别
vector* 就是声明一个指向vector的指针vector* pV = new vector();pV->push_back(1);vector::iterator it = pV->begin();cout 所以那vector*的iterator 依然是vector::iterator在使用STL容器(比如map、list、vector等)的时候,是用放一个对象转载 2015-10-04 20:48:38 · 4368 阅读 · 0 评论 -
C++引用
引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅 是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖 引玉的作用、 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。转载 2015-10-04 17:44:14 · 290 阅读 · 0 评论 -
机试小知识点(一)
32位操作系统有32根地址线,每根两种状态0/1,表示2的32次方个内存单元,每个内存单元占1个字节(OS只能对字节进行操作,位操作用位操作符),1G = 2^10M,1M = 2^10K,1K = 2^10B,2^32B = 4*2^10*2^10*2^10 = 4G知识点 1:class Base{public: virtual ~Base(){cout<<"~Base"<<endl原创 2016-09-11 22:17:18 · 578 阅读 · 0 评论