首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大家看看有必要吗?该如何处理

2012-03-16 
大家看看有必要吗??? C++primer中的原文:为使IntArray类能够被继承我们需要在语法上做一点小小的改变必须

大家看看有必要吗???

C++primer   中的原文:


为使IntArray   类能够被继承我们需要在语法上做一点小小的改变必须可选择的
减少封装的层次以便允许派生类访问非公有的实现而且我们也必须显式地指明哪些函数
应该是虚拟的最重要的变化在于我们如何把一个类设计成为基类
在基于对象的程序设计中通常类的提供者只有一个但是类的用户有许多个提供者
设计并且通常也会实现类用户使用提供者提供的公有接口行为的分离可通过将类分成公
35   第二章   C++浏览
有与私有访问级别而反映出来
在继承机制下有多个类的提供者一个提供基类实现可能还有一些派生类另外一
个或多个提供者在继承层次的生命周期内提供派生类这种行为也是一种实现行为于类的
提供者经常但并不总是需要访问基类的实现为了提供这种能力同时还要防止对基类
实现的一般性访问C++提供了另外一个访问级别保护protected   级别在类的保护区
域内的数据成员和成员函数不提供给一般的程序只提供给派生类放在基类的私有区
域内的成员只能供该类自己使用派生类不能使用下面是修改过的IntArray   类
class   IntArray   {
public:
//   构造函数
explicit   IntArray(   int   size   =   DefaultArraySize   );
IntArray(   int   *array,   int   array_size   );
IntArray(   const   IntArray   &rhs   );
//   虚拟析构函数
virtual   ~IntArray()   {   delete   []   ia;   }
//   等于和不等于操作
bool   operator==(   const   IntArray&   )   const;
bool   operator!=(   const   IntArray&   )   const;
IntArray&   operator=(   const   IntArray&   );
int   size()   const   {   return   _size;   }
//   去掉了索引检查功能   .   .   .
virtual   int&   operator[](int   index)   {   return   ia[index];   }
virtual   void   sort();
virtual   int   min()   const;
virtual   int   max()   const;
virtual   int   find(   int   value   )   const;
protected:
//   参见13.5   节的说明
static   const   int   DefaultArraySize   =   12;
void   init(   int   sz,   int   *array   );
int   _size;
int   *ia;
};


他这个程序中的   virtual   int&   operator[](int   index)   {   return   ia[index];   }
virtual   void   sort();
virtual   int   min()   const;
virtual   int   max()   const;
virtual   int   find(   int   value   )   const;     有必要声明成虚函数吗??????

[解决办法]
你可以先去掉virtual,然后测试嘛。
[解决办法]
你只是试了试,而不是严格的测试,所以没试出来很正常。
建议你继续多试,直到试出问题。当然,C++ Primer的那段再反复看看。

[解决办法]
我觉得第一个是有必要的,我的理解:
作者这里的意思是,把这几个函数声明为virtual,以便在子类中提供不同的实现
比如virtual int& operator[](int index) { return ia[index]; }
在后面的一个子类IntArrayRC里,实现为带有越界检查:
virtual int& operator[](int index)
{
check_range( index );
return ia[index];
}
后面的
virtual void sort();
virtual int min() const;
virtual int max() const;
virtual int find( int value ) const;
这几个函数,作者没有详细表述其在不同子类中的实现

关于是否应该把成员函数声明为virtual,
后面好像还有一道习题

热点排行