C++ primer 中的一些问题,请教!

metears 2010-05-16 09:03:22
1。 派生类的声明问题。
如果需要声明(但不实现)一个派生类,则声明包含类名但不包含派生列表。
class A:public B; // 这种声明是错误的
正确的声明为:
class A;
class B; //书上说这种声明是正确的;

我想问这种的正确声明方式 这么书写, 怎样就能断定A是B的派生类呢?? 感觉上不就是前向声明了两个类吗?怎么会有继承关系?????


2.C++中的多态性
引用和指针的静态类型与动态类型可以不同。这是C++用以支持多态性的基石。

问题: 前面半句没看懂, 有人能具体解释一下吗?????
...全文
120 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
metears 2010-05-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 thefirstz 的回复:]
C/C++ code
class B{};
class A;

class A:B{};// 这个时候再实现类A
[/Quote]

太感谢了, 懂了 知道什么意思了
结贴
昵称很不好取 2010-05-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wade_2003 的回复:]
ls好强悍撒,学习
[/Quote]
其实应该写为在其它文件里实现~~
wade_2003 2010-05-16
  • 打赏
  • 举报
回复
ls好强悍撒,学习
昵称很不好取 2010-05-16
  • 打赏
  • 举报
回复
class B{};
class A;

class A:B{};// 这个时候再实现类A
metears 2010-05-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 thefirstz 的回复:]
我翻了下,这里讲的是前向声明,如果只是声明而不是定义一个类的话,在这里不需要知道该类的细节,如果写成class A:public B; 就需要实现该类,写成下面形式就不需要时给出该类细节。
class A;
class B;
它的意思应该是到实现时候再去约束两者关系.
[/Quote]
不好意思, 没太看明白啊,能举个小例子吗?
如果在有基类的情况下, 正确的声明一个派生类呢?
kingstarer 2010-05-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 metears 的回复:]
1。 派生类的声明问题。
如果需要声明(但不实现)一个派生类,则声明包含类名但不包含派生列表。
class A:public B; // 这种声明是错误的
正确的声明为:
class A;
class B; //书上说这种声明是正确的;

我想问这种的正确声明方式 这么书写, 怎样就能断定A是B的派生类呢?? 感觉上不就是前向声明了两个类吗?怎么会有继承关系?……
[/Quote]
一个基类的指针或者引用可以指向派生类的对象

静态类型是基类,动态类型是派生类
昵称很不好取 2010-05-16
  • 打赏
  • 举报
回复
我翻了下,这里讲的是前向声明,如果只是声明而不是定义一个类的话,在这里不需要知道该类的细节,如果写成class A:public B; 就需要实现该类,写成下面形式就不需要时给出该类细节。
class A;
class B;
它的意思应该是到实现时候再去约束两者关系.
metears 2010-05-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 thefirstz 的回复:]
1,声明两个类当然不能构成继承关系,C++ primer上有这么写吗?
2,
class Base{};
class Derived:public Base{};

Base *p = new Derived;
—— 指针p的静态类型是Base,动态类型是Derived
[/Quote]

派生类的声明 C++primer 479 页 是这么写的啊
昵称很不好取 2010-05-16
  • 打赏
  • 举报
回复
1,声明两个类当然不能构成继承关系,C++ primer上有这么写吗?
2,
class Base{};
class Derived:public Base{};

Base *p = new Derived;
—— 指针p的静态类型是Base,动态类型是Derived

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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