讨论一下从父类扩展和从子类扩展的作用!每个好的复帖最少给50分!

solotony 2003-08-28 04:28:37
知道已经有这样的的继承体系,其中成员可以任意,但是确定后不可修改
class Base{};
template <typename T> class Sub{};
typedef Sub<Base> TagertClass;

一.通过定义:
class MyClass : public Base{};
typedef Sub<MyClass> TagertClass;

二.通过定义
class MyClass : Sub<Base>{};
typedef MyClass TagertClass;

在Base和Sub定义后就不修改的情况下,通过两种方式定义MyClass对
TagertClass行为的有何影响? 略举代码说明为好

<Up者无效>
...全文
45 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oopig 2003-08-28
  • 打赏
  • 举报
回复
java也支持继承体系中访问许可的扩大。我觉得没有什么必要去做这方面的限制。
solotony 2003-08-28
  • 打赏
  • 举报
回复
实验中不幸的发现,一直的认识是错误的!:
1.访问许可,子类扩展中访问许可只能缩小,即public- >protected- >private
子类的扩展中访问许可是可以扩大的.
如下例:

#include "stdio.h"
class MyClass
{
public:
virtual void Handle(){ printf("MyClass"); }
};

class Sub: public MyClass
{
protected:
virtual void Handle(){ printf("sub");}
};

class Sub2: public Sub
{
public:
virtual void Handle(){ printf("sub2");}
};

int main(int argc, char* argv[])
{
Sub2 s;
dynamic_cast<MyClass&>(s).Handle();
return 0;
}

为C++哀悼中....
solotony 2003-08-28
  • 打赏
  • 举报
回复
我完全同意oopig(面向对象的猪)的观点.

补充几点:
1.访问许可,子类扩展中访问许可只能缩小,即public->protected->private
3.类型TargeClass = Sub<Myclass> 继承自MyClass:Base,还是具有MyClass的行为

50分另帖来领!

oopig 2003-08-28
  • 打赏
  • 举报
回复
3.类的类型不一样(is a ...)

如果
class MyClass : public Base{};
typedef Sub<MyClass> TagertClass;
其中TargetClass不是MyClass和Base的子类,不具有MyClass和Base的行为特征。


class MyClass : Sub<Base>{};
typedef MyClass TagertClass;
那么TagertClass就是MyClass,自然具有MyClass的行为特征。

oopig 2003-08-28
  • 打赏
  • 举报
回复
对于TagetClass的行为还是有可能有影响。
1.函数的访问许可可能改变
2.调用的函数实现可能改变

class MyClass
{
public:
virtual void Handle() {}
};

template <typename T>
class Sub
{
private:
virtual void Handle() {}
};

那么
class MyClass : public Base{};
typedef Sub<MyClass> TagertClass;
TargetClass的Handle()实际上是Sub::Handle(),而且访问许可是private

class MyClass : Sub<Base>{};
typedef MyClass TagertClass;
TargetClass的Handle()实际上是MyClass::Handle(),访问许可是public
oopig 2003-08-28
  • 打赏
  • 举报
回复
对于TagetClass的行为是没有什么影响,但是对于MyCalss的实现和布局是有影响。
吃完饭继续说。

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧