摘要:
【1】认识智能指针 什么是智能指针?根据C++面向对象编程的思想,智能指针是一种对象。 常规指针与智能指针的区别如下: 对比发现常规指针pd的问题在于,不是有析构函数的类对象。 如果它是个对象,则可以在对象过期时,它的析构函数删除掉指向的内存。而这正是智能指针背后的思想。 好吧!那么,既然是对象,肯 阅读全文
摘要:
当你有一个对象的指针,而对象实际是该指针类型的派生类(例如:一个 Vehicle*指针实际指向一个Car 对象)。由此有两种类型:指针的(静态)类型(在此是Verhicle),和指向的对象的(动态)类型(在此是Car)。(1)静态类型 意味着成员函数调用的合法性被尽可能早地检查:编译器在编译时,编译器用指针的静态类型决定成员函数调用是否合法。如果指针类型能够处理成员函数,那么指针 所指对象当然能很好的处理它。例如,如果 Vehicle 有某个成员函数,则由于Car是一种Vehicle,那么Car 当然也有该成员函数。(2)动态绑定意味着成员函数调用的代码地址在最终时刻才被决定:基于运行时的.. 阅读全文
摘要:
如何禁止产生类对象呢?只要将类的构造函数用private修饰即可。那么,如何限制类只能产生一个类对象呢?只要借助于友元函数的static对象即可。示例代码如下: 1 class Printer 2 { 3 private: 4 Printer() 5 { 6 cout<<"thePrinter constructed"<<endl; 7 } 8 public: 9 void what() 10 { 11 cout<<"It's a printer"<<endl; 12 } 1... 阅读全文
摘要:
6.4:理解临时对象<1>为了使函数成功调用而进行隐式类型转换和函数返回对象时<2>当传送给函数的对象类型与参数类型不匹配时会产生的一种情况<3>当通过传值方式传递对象或者传递常量引用参数时,才会发生类型转换示例代码如下: 1 #include<iostream> 2 using namespace std; 3 class Test 4 { 5 int a; 6 public: 7 Test(int data = 10):a(data) 8 { 9 cout<<"Construction :"<<th 阅读全文
摘要:
只允许对象生成于堆内?怎么理解?肿么办? 我们已经知道,假如手头上有一个类Person,当你在程序中写下Person objTemp;时, 编译器悄悄地做了两件事:调用constructor构造对象objTemp,而在弹栈时,调用析构函数destructor析构掉对象objTemp。 对象rn的构造 阅读全文
摘要:
示例代码如下: 以上四种交换方法,各有利弊。 Good Good Study, Day Day Up. 顺序 选择 循环 坚持 阅读全文
摘要:
在了解代码之前,请先仔细阅读这些概念:<1>虚构造函数:一种允许你做一些 C++不直接支持的事情的用法。你可能通过虚函数 virtual clone()(对于默认拷贝构造函数)或虚函数 virtual create()(对于默认构造函数),得到虚构造函数产生的效果。<2>虚拟拷贝构造函数:一种特殊的虚拟构造函数――虚拟拷贝构造函数――也有着广泛的用途。虚拟拷贝构造函数能返回一个指针,指向调用该函数的对象的新拷贝。因为这种行为特性,虚拟拷贝构造函数的名字一般都是copySelf,cloneSelf或者是像下面这样就叫做clone。<3>协变返回类型:注意:下述 阅读全文
摘要:
4.1:谨慎定义类型转换函数<1>容易的方法是利用一个最新的编译器特性:explicit关键字<2>C++编译器把">>"作为一个符号来解释,在两个">"间没有空格,语句会产生语法错误。<3>隐式类型转换函数示例代码如下: 1 #include<iostream> 2 using namespace std; 3 4 template<class T> 5 class Array 6 { 7 public: 8 class ArraySize 9 {10 public:11 A 阅读全文
摘要:
3.1:指针与引用的区别 <1> 指针用操作符“*”和“->”;引用使用操作符“.” <2> 任何时候都不能使用指向空值的引用。即就是一个引用必须总是要指向某个对象通俗一点, 就是说,如果你的设计不允许变量为空,这时就把变量声明为引用 <3> 不存在指向空值的引用这个事实意味着使用引用的代码效率比使 阅读全文