【24.1.5笔记】C++ Primer自学 Day6

二、C++浏览

这本书好难~感觉要先过一遍再重新回头看。

5、泛型设计

        泛型指的是类型是广泛的,用一个模板实现不同数据类型相同的功能。

        实现方式:C++内设机制,可以将类成函数定义内部的类型和值参数化【大概理解:把类型先设置成变量,然后最后附上实际的类型】,以下是示例:

template < class elemType > //template引入模板,参数是elemType,class代表了一个类型
class Array { 
public: 
 // 把元素类型参数化
 explicit Array( int size = DefaultArraySize ); //explicit 表示显式转换【只支持显式转换】
 Array( elemType *array, int array_size ); //elemType 在这里都是占位符,由实际类型决定
 
 Array( const Array &rhs ); 
 
 virtual ~Array() { delete [] ia; } 
 bool operator==( const Array& ) const; 
 bool operator!=( const Array& ) const;
 Array& operator=( const Array& ); 
 int size() const { return _size; } 
 virtual elemType& operator[](int index){ return ia[index]; } //
 virtual void sort(); 
 virtual elemType min() const;  //
 virtual elemType max() const;  //
 virtual int find( const elemType &value ) const; // 
protected: 
 static const int DefaultArraySize = 12; 
 int _size; 
 elemType *ia; 
};

在主函数中使用方法:

 const int array_size = 4; 
 
 // elemType 变成了 int 
 Array<int> ia(array_size); 
 
 // elemType 变成了 double 
 Array<double> da(array_size); 
 
 // elemType 变成了 char 
 Array<char> ca(array_size);

        在使用的时候,只需要在尖括号里面加上实际的类型即可。在生成时会生成相应的类型的数组【书里之前写的函数体】。在调用时,并不是所有的成员函数都会马上被实例化,而是要用到的时候才会被实例化【有助于节省资源16.8讨论】。

        类模板也可以作为基类或者派生类。【可以继承】在使用自己定义的函数时,如果要对模板类进行操作,那么函数也应该是模板函数。

Q1:给出下列类型声明
        template <class elemType> class Array;
        enum Status { ... };
        typedef string *Pstring;
如果存在的话 下面哪些对象的定义是错误的
        (a) Array< int*& > pri( 1024 );
        (b) Array< Array<int> > aai( 1024 );
        (c) Array< complex< double > > acd( 1024 );
        (d) Array< Status > as( 1024 );
        (e) Array< Pstring > aps( 1024 );
【遇到困难了、、学到之后回头看】

 6、基于异常的设计

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值