第四十一讲 深入class(4)

      今天加了会班,回来有些晚,新内容只怕可能说不了,我们今天来说说我们的SpreadsheetData类的使用:
——————————–
SpreadsheetData  myData(3,4);


myData.SetCellAt(2,2,6);


cout<<myData.GetCell(2,2).GetDoubleValue()<<endl;


——————————-
这个程序不难看懂,我们建立一个横三竖四的电子表格,然后再电子表格的坐标出(2,2)将值设为6,然后他们再通过将这个单元格里的内容取出来。下面我们来验证是否正确:
第四十一讲 深入class(4)
那么现在大家可能感兴趣的是我们该如何实现这些接口,我为什么要说大家感兴趣呢?是因为今天下班回来晚了,所以没有准备好说新的内容,所以,今天我们的内容就是实现前天我们留下的界面接口:
——————————————-
//SpreadSheetData.cpp
#include “SpreadSheetData.h”
#include <iostream>

using namespace My_Code;

SpreadSheetData::SpreadSheetData(int width,int high):
m_width(width>defaultwidth?defaultwidth:width),
m_high(high>defaulthigh?defaulthigh:high)
{
m_Cell = new SpreadSheetCell*[m_width];

for(int i=0;

i<m_width;

i++)
m_Cell[i] = new SpreadSheetCell[m_high];

}
SpreadSheetData::~SpreadSheetData()
{
for(int i=0;

i<m_width;

i++)
delete [] m_Cell[i];

delete [] m_Cell;

}
SpreadSheetData::SpreadSheetData(const SpreadSheetData &

Data)
{
m_width = Data.m_width;

m_high = Data.m_high;

m_Cell = new SpreadSheetCell*[m_width];

for(int i=0;

i<m_width;

i++)
m_Cell[i] = new SpreadSheetCell[m_high];

for(int i=0;

i<m_width;

i++)
for(int j=0;

j<m_high;

i++)
m_Cell[i][j] = Data.m_Cell[i][j];

}
SpreadSheetData&

SpreadSheetData::operator=(const SpreadSheetData &

Data)
{
if(this == &

Data)

return *this;

for(int i=0;

i<m_width;

i++)
delete[] m_Cell[i];

delete m_Cell;

m_width = Data.m_width;

m_high = Data.m_high;

m_Cell = new SpreadSheetCell*[m_width];

for(int i=0;

i<m_width;

i++)
m_Cell[i] = new SpreadSheetCell[m_high];

for(int i=0;

i<m_width;

i++)
for(int j=0;

j<m_high;

i++)
m_Cell[i][j] = Data.m_Cell[i][j];

return *this;

}

void SpreadSheetData::SetCellAt(int x,int y,const SpreadSheetCell&

Cell)
{
if(!inRang(x,m_width) || !inRang(y,m_high))
{
cout<<“参数有误!”<<endl;

return;

}
m_Cell[x][y] = Cell;

}
SpreadSheetCell&

SpreadSheetData::GetCell(int x,int y)
{
SpreadSheetCell Cell;

if(!inRang(x,m_width) || !inRang(y,m_high))
{
cout<<“参数有误!”<<endl;

return Cell;

}

return m_Cell[x][y];

}
bool SpreadSheetData::inRang(int val,int upper)
{
if(val <= 0 || val >upper)

return false;

return true;

}
—————————————-
大家注意的话还有几个接口我没有实现,而且那天我让大家思考的CopyFrom辅助函数也没有实现,不知道大家思考得怎么样了,如果没有想明白的话,那么看到今天的实现大家是不是会恍然大悟呢?好吧,这个问题继续留给大家思考。

发表评论