摘要: 1.为什么使用友元?在实现类之间数据共享时,减少系统开销,提高运行效率。或者说允许外面的类或函数访问类的私有变量或保护变量。2.使用友元的场合(1) 操作符重载的场合; (2) 两个类共享数据的场合;3.友元的分类(1)在类外的普通函数可以定义为类的友元函数。在调用时直接调用。可以在类内或类外定义。不需要加类的作用域。(2)另一个类的成员函数作为该类的友元函数。(3)类B作为类A的友元类。 注: 友元函数不是成员函数。在类中声明可为public或private。一般为private. 友元类B的所有的成员函数均是类A的友元函数。详解:http://www.cnblogs.com/BeyondA 阅读全文
posted @ 2013-06-28 21:24 成长的点点滴滴 阅读(166) 评论(0) 推荐(0)
摘要: 一、类中的const成员有两种初始化方式:1.与static一同使用,在类外或类中进行初始化。2.使用类的初始化列表进行初始化。二、const 类的对象或者引用只能调用const成员函数,否则会编译错误。 const成员函数中只能使用const成员或调用const函数。三、类中的const成员函数如果想改变非常量成员的话,有两种方式:1.使用mutable关键字class A{private:mutable int r;public:void f()const;};void A::f()const{r++;}2.使用const_cast<type_id>(expression)cl 阅读全文
posted @ 2013-06-19 15:27 成长的点点滴滴 阅读(164) 评论(0) 推荐(0)
摘要: 内存泄漏是指由于疏忽或错误使得应用程序未能释放不在使用的内存。内存泄漏并非物理上内存的消失,而是应用程序在分配内存后,由于设计错误,导致该段内存在被释放之前失去了对它的控制,从而导致内存浪费。我们常说的内存泄漏是指堆的内存泄漏。使用malloc,realloc,new在堆上申请内存空间,在使用完毕后必须使用free或delete释放掉,如果没有手动释放,我们就说这块内存泄漏了。 阅读全文
posted @ 2013-06-08 22:31 成长的点点滴滴 阅读(124) 评论(0) 推荐(0)
摘要: 在C++中的区别:1.默认成员的保护级别:struct默认是public ,class 默认是private2.默认派生类的保护级别:struct默认是public, class默认是private在C#中的区别:默认成员的保护级别都是private, struct 是值类型,该类型的对象实在栈上分配内存;class是引用类型,该类型的对象是在堆上分配内存。C#与C++的区别:1.struct与class的区别;2.在C#中有Finalize 或Dispose 方法用来释放申请的资源。Finalize方法虽然写法与C++中的析构函数相同,都是~加类型名,但是调用时机不同。Finalize是CL 阅读全文
posted @ 2013-06-08 14:42 成长的点点滴滴 阅读(273) 评论(0) 推荐(0)
摘要: 1.static成员函数不能是虚函数 虚函数存在于有继承关系的类的对象中,在派生类中覆盖了基类的虚函数,实现了动态绑定。通过基类的指针或引用调用派生类版本。static成员函数在继承关系中只存在一份。是属于类的,而不受限于某个对象,不存在this指针。在派生类中的继承的static函数和基类是一个函数。因此~。2.inline成员函数不能是虚函数函数的inline属性是在编译时静态确定的,而virtual则是在运行时确定的。肯定不能同时存在。inline函数建议编译程序在调用该函数的地方将函数代码展开来插入到caller的代码中,这个只是一种指示,至于会不会被内敛,编译程序要看该函数是否存在多 阅读全文
posted @ 2013-06-03 21:35 成长的点点滴滴 阅读(239) 评论(0) 推荐(0)
摘要: 1. 初始化一个引用变量必须在定义的时候。而所有的运算符操作都被视为赋值而不是初始化,所以引用参数的初始化必须在初始化列表中进行。class Test{ public: Test(int val) : ref_(val){} ~Test() {} private: int & ref_;}; int main(){ Test t(1); return 0; } 也许你不会碰见任何问题,但这里我们会发现val是一个形式参数,但构造函数执行完后它会自动释放,所以更好的方式是: class Test{ public: Test(int &val) : ref_(val){} ~... 阅读全文
posted @ 2013-06-03 14:30 成长的点点滴滴 阅读(168) 评论(0) 推荐(0)
摘要: hashtable 与hashmap的区别:1.hashtable继承自dictionary接口,hashmap继承自AbstractMap接口;2.hashtable是线程安全的,方法中带有syncronize.hashmap不是线程安全的;3.hashtable不允许键或值为NULL;hashmap允许。 阅读全文
posted @ 2013-05-31 10:12 成长的点点滴滴 阅读(112) 评论(0) 推荐(0)
摘要: 虚拟内存是计算机系统内存管理的一种技术,将物理地址扩展到磁盘空间,使得应用程序认为它具有连续的可用的内存(一个连续的完整的内存空间)。其实,它是被分割成多个物理内存碎片,有一部分还分布在外部磁盘存储器上,在需要时进行数据交换。使用虚拟内存技术,使得大型程序的编写变得容易,也使得物理内存的使用更有效率。 阅读全文
posted @ 2013-05-31 09:51 成长的点点滴滴 阅读(156) 评论(0) 推荐(0)
摘要: 1.C++中static的作用1)隐藏在编译多个程序时,所有未加static关键字的全局变量和函数具有全局作用域。static的作用域是整个文件,对其他文件是不可见的。这样就可以在其他程序中定义同名的函数和变量,而不会出现命名冲突的问题。在类中定义的static函数或变量称为静态成员。该成员属于类,也就是说当类的一个实例改变了该成员,对于其他类的实例是可见的。static可以修饰变量或函数。修饰函数时主要作用就是隐藏。修饰变量还具有两个功能:2)保持变量内容持久static变量是存储在静态数据区,在程序第一次执行时完成初始化,也是唯一一次初始化。该变量的值可以保存到第二次修改它为止。3)默认值 阅读全文
posted @ 2013-05-27 21:46 成长的点点滴滴 阅读(463) 评论(0) 推荐(0)
摘要: 相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc 与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加malloc/free。(2)在用法上也有所不同。函数malloc 的原型如下:void * malloc(size_t size);用malloc 申请一块长度为leng 阅读全文
posted @ 2013-05-27 19:24 成长的点点滴滴 阅读(157) 评论(0) 推荐(0)