C++ 模板类定义与声明

本文介绍了一个通用的C++模板类Grid的实现细节,该类用于创建二维数据结构,并支持基本的操作如设置和获取元素。文章展示了如何通过模板来处理不同类型的元素,并提供了构造、析构以及赋值操作符等成员函数的具体实现。
摘要由CSDN通过智能技术生成

#pragma once

#ifndef GRID_H
#define GRID_H

template <typename T>
class Grid
{
public:
    Grid(int inWidth = kDefaultWidth, int inHeight = kDefaultHeight);
    Grid(const Grid<T>& src);
    ~Grid();
    Grid<T>& operator=(const Grid<T>& rhs);
    void setElementAt(int x, int y, const T& inElem);
    T& getElementAt(int x, int y);
    const T& getElementAt(int x, int y) const;
    int getHeight() const {return mHeight;}
    int getWidth() const {return mWidth;}
    static const int kDefaultWidth = 10;
    static const int kDefaultHeight = 10;

protected:
    void copyFrom(const Grid<T>& src);
    T** mcells;
    int mHeight,mWidth;
};

template <typename T>
const int Grid<T>::kDefaultHeight;

template <typename T>
const int Grid<T>::kDefaultWidth;

template <typename T>
Grid<T>::Grid(int inWidth, int inHeight):mWidth(inWidth),mHeight(inHeight)
{
    this->mcells = new T* [this->mWidth];
    for(int i = 0; i < this->mHeight; i++)
    {
        this->mcells[i] = new T[this->mHeight];
    }
}

template <typename T>
Grid<T>::Grid(const Grid<T>& src)
{
    copyFrom(src);
}

template <typename T>
Grid<T>::~Grid()
{
    for(int i = 0; i < this->mWidth; i++)
    {
        delete[] mcells[i];
    }

    delete[] mcells;
}

template <typename T>
void Grid<T>::copyFrom(const Grid<T>& src)
{
    int i, j;
    this->mWidth = src.mWidth;
    this->mHeight = src.mHeight;

    this->mcells = new T* [mWidth];
    for(i = 0; i < mWidth; i++)
    {
        this->mcells[i] = new T [this->mHeight];
    }

    for(i = 0; i < mWidth; i++)
    {
        for(j = 0; j < mHeight; j++)
        {
            this->mcells[i][j] = src[i][j];
        }
    }
}

template <typename T>
Grid<T>& Grid<T>::operator=(const Grid<T>& rhs)
{
    //check for self-assignment;
    if(this == &rhs)
    {
        return (*this);
    }
    //Free the old memory
    for(int i = 0; i < mWidth; i++)
    {
        delete [] mcells[i];
    }

    delete[] mcells;

    //copy the new memory
    copyFrom(rhs);

    return (*this);
}

template <typename T>
void Grid<T>::setElementAt(int x, int y, const T& inElem)
{
    this->mcells[x][y] = inElem;
}

template <typename T>
T& Grid<T>::getElementAt(int x, int y)
{
    retunrn (this->mcells[x][y]);
}

template <typename T>
const T& Grid<T>::getElementAt(int x, int y) const
{
    retunrn (this->mcells[x][y]);
}


#endif // GRID_H
 注意:C++ 模板类定义与声明写在同一个文件中,不然编译通不过。

 

main函数中的调用:Grid<int> myIntGrid;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值