more effective c++ Item M4 书上写的代理类实现不了,需要修改一下哟

more effective c++ Item M4

书上原文如下

class Array { 
public:  
  class ArraySize {                    // 这个类是新的 
  public: 
    ArraySize(int numElements): theSize(numElements) {} 
    int size() const { return theSize; }  
  private: 
    int theSize; 
  };  
Array(int lowBound, int highBound); 
  Array(ArraySize size);                  // 注意新的声明  
...  
}; 

        这里把 ArraySize 嵌套入 Array 中,为了强调它总是与 Array 一起使用。你也必须声明ArraySize 为公有,为了让任何人都能使用它。 想一下,当通过单参数构造函数定义 Array 对象,会发生什么样的事情: 
Array<int> a(10);
        你的编译器要求用 int 参数调用 Array<int>里的构造函数,但是没有这样的构造函数。编译器意识到它能从 int 参数转换成一个临时 ArraySize 对象,ArraySize 对象只是Array<int>构造函数所需要的,这样编译器进行了转换。函数调用(及其后的对象建立)也就成功了。


#include <iostream>
using namespace std;
template <typename T>
class Array {
public:
	class ArraySize {                    // 这个类是新的
	public:
		ArraySize(int numElements): theSize(numElements) {}
		int size() const { return theSize; }
	private:
		int theSize;
	};
	Array(int lowBound, int highBound);
	Array(ArraySize size){}                  // 注意新的声明
	/*{
		cout << "Constructed" << endl;
	}*/
};
int main()
{
	Array<int> a(10);
	return 0;
}

        请注意,如果构造函数Array(ArraySize size)函数体为空,编译器GCC4.5.2会提示:

        undefined reference to `Array<int>::Array(Array<int>::ArraySize)'|
        ||=== Build finished: 1 errors, 0 warnings ===|


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值