1.常用的几何类数据结构有哪些(tips:例如单项链表)?简述其各自的特点
2.面向对象编程中的三大基本概念
3.什么是虚函数
4.查找设计上的失误和错误
class A
{
public:
A(int nSize)
{
m_pData = new int[nSize];
m_nSize = nSize;
memset(m_pData, 0, m_nSize);
}
~A() {delete m_pData;}
void GetBuffer(int* pData, int nSize) {m_pData = pData; m_nSize = nSize;}
void Set(int nIndex, int nValue) {m_pData[nIndex] = nValue;}
int Get(int nIndex) {return m_pData[nIndex];}
virtual int Search (int nValue) = 0;
private;
int* m_pData;
int m_nSize;
};
class B :public A
{
public:
virtual int Search(int nValue)
{
for (int i=0; i < m_nSize; i++)
{
if (m_pData[i] == nValue) return i;
}
return -1;
}
};
1.数据结构的 单双向 循环链表 栈 对列 堆 树 图
2.封装 继承 多态
3.虚函数用来表现基类和派生类的成员函数之间的一种关系.
虚函数的定义在基类中进行,在需要定义为虚函数的成员函数的声明前冠以关键字 virtual.
基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义.
在派生类中重新定义时,其函数原型,包括返回类型,函数名,参数个数,参数类型及参数的先后顺序,都必须与基类中的原型完全相同. 虚函数是重载的一种表现形式,是一种动态的重载方式.
4.
这两个类问题挺多的
....
析构
访问权限问题
set与get似乎有可能会越界操作
class A
{
public:
A(int nSize)
{
m_pData = new int[nSize]; // 没有判断nSize是否大于1
m_nSize = nSize;
memset(m_pData, 0, m_nSize);
}
~A()
{
delete m_pData; // delete[] m_pData
}
void GetBuffer(int* pData, int nSize)
{
m_pData = pData; // 个人理解应该是将pData内容复制到m_pData中,用memcpy
m_nSize = nSize;
}
void Set(int nIndex, int nValue)
{
m_pData[nIndex] = nValue; // 没检查nIndex是否越界
}
int Get(int nIndex)
{
return m_pData[nIndex]; //同上
}
virtual int Search (int nValue) = 0;
private:
int* m_pData;
int m_nSize;
};
class B :public A
{
public:
virtual int Search(int nValue)
{
for (int i=0; i < m_nSize; i++)
{
if (m_pData[i] == nValue) return i; // 无法访问到m_nSize
}
return -1;
}
};
阅读(2040) | 评论(0) | 转发(0) |