EssentialC++第六章总结+课后习题+踩雷清单

这篇博客总结了C++中模板类的基本概念和使用,强调了如何将非模板类转化为模板类,以及如何定义模板成员函数。博主分享了课后习题的思考,包括改写非模板类为模板类并实现动态内存管理。同时,列举了学习过程中的错误和踩雷清单,如误用using namespace std和未声明的模板类型。还提醒了C++中assert宏的作用。
摘要由CSDN通过智能技术生成

总结

  • 讲了模板类,这是在原基础上把对象类型抽离出来,变成template<typename 占位符>这种形式。
  • 然后怎么定义模板类,模板成员函数,和定义一般模板函数大同小异,抽离出来类型就可以,注意别忘把类型抽离出来,然后注意不该改成模板类型的别改成模板类型(比如大小、长度,这只能是整数,名字,这只能是string型)
  • 关于模板样式的形参,写这样的形式:const 模板类型名& 形参名,因为模板类型也许是内置类型也许是class类型,这样的格式避免复制所带来巨大的开销,使程序效率降低。
  • 模板参数可以是<类型名 变量名(可以=默认参数值)>这种形式。
  • 模板类最好搭配着模板模板函数。
  • 返回类型 函数名(*&参数名),这里的*&可以让我们修改形参指针本身,也可以修改形参指针所指的对象。

课后习题

6.1改写非模板类称为模板类

template<typename elemType>
class example{
   
public:
    example(const elemType &min,const elemType &max);//一定要const加&,因为elemType不知道啥类型,
    //万一是class类型,不加const和&就意味着传值传递以及可能被认为会改变形参,这将会造成程序可读性变差和效率降低。
    example(const elemType *array,int size);
    elemType& operator[](int index);//size、index这种不是想改变类型就改变类型的变量,就保持其原类型即可。
    bool operator==(const example1&)const;
    bool insert(const elemType*,int);
    bool insert(const elemType&);
    elemType min()const{
   return _min;}
    elemType max()const{
   return _max;}
    void min(const elemType&);
    void max(const elemType&);
    int count(const elemType &value)const;
private:
    int size;//数组元素个数必须为整数,不可以是其他。
    elemType *parray;
    elemType _min;
    elemType _max;
};

6.2 改写非模板类成模板类,并扩充其功能,使它能够通过堆内存来支持任意行列大小。分配/释放内存的操作,请在构造函数/析构函数中进行

我不知道咋回事,书上源代码也过不了。就直接搬源码来了。

#include <iostream>
#include <cassert>
using namespace std;

template <typename elemType>
class Matrix
{
   
    friend Matrix<elemType>
    operator+( const Matrix<elemType>&, const Matrix<elemType>& );

    friend Matrix< elemType >
    operator*( const Matrix<elemType>&, const Matrix<elemType>& );

public:
    Matrix( int rows, int columns );
    Matrix( const Matrix& );
    ~Matrix(){
    delete [] _matrix; }
    Matrix& operator=( const Matrix& );

    void operator+=( const Matrix& );
    elemType& operator
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值