由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - c++ covariant type(受不了C++啦!!!)
相关主题
A C++ inheritance question!friend function 不能virtual 怎么搞呢?
问个C++ virtual function的问题 (转载)请问c++中操作符可以声明为虚函数吗?
c++ inline问题 (转载)[合集] type traits is magic
问个 C++到C的问题abstract Factory 的困惑
问一下这个cast在java里是怎么work的C++问题
C++ 弱问一个问个virtual table 的问题
谁能给出关于class和type的区别的英文解释请教个virtual function的问题
C++ virtual function 定义在 derived class 会怎么样?弱问一个virtual function的问题
相关话题的讨论汇总
话题: overb话题: overd话题: covariant话题: type话题: public
进入Programming版参与讨论
1 (共1页)
z****e
发帖数: 2024
1
class overb{
public:
virtual overb f(){}//invalide covariant type
};
class overd:public overb{
public:
virtual overd f(){}//invalide covariant type
};
再看:
class overb{
public:
virtual overb* f(){}//valide covariant type
};
class overd:public overb{
public:
virtual overd* f(){}//valide covariant type
};
难道overd 不是 overb吗? 这不正好满足type 的 <=关系吗?
1. overd 对应 overb
2. overd* 对应 overb*
请问1, 和 2 , 有什么不一样?为什么一个是Covariant Return Type,另一个不是呢
X****r
发帖数: 3557
2
Because an "overd *" can be used in place of an "overb *",
but an "overd" cannot be used directly in place of an "overb".
(check Liskov substitution principle)
Think about this:
overd d;
overb b = d;
And this:
overd* pd;
overb* pb = pd;
They are totally different.

【在 z****e 的大作中提到】
: class overb{
: public:
: virtual overb f(){}//invalide covariant type
: };
: class overd:public overb{
: public:
: virtual overd f(){}//invalide covariant type
: };
: 再看:
: class overb{

z****e
发帖数: 2024
3
五体投地。

【在 X****r 的大作中提到】
: Because an "overd *" can be used in place of an "overb *",
: but an "overd" cannot be used directly in place of an "overb".
: (check Liskov substitution principle)
: Think about this:
: overd d;
: overb b = d;
: And this:
: overd* pd;
: overb* pb = pd;
: They are totally different.

w****m
发帖数: 146
4
upcasting only applies to pointer

【在 z****e 的大作中提到】
: class overb{
: public:
: virtual overb f(){}//invalide covariant type
: };
: class overd:public overb{
: public:
: virtual overd f(){}//invalide covariant type
: };
: 再看:
: class overb{

z****e
发帖数: 2024
5
还有reference 啦。

【在 w****m 的大作中提到】
: upcasting only applies to pointer
1 (共1页)
进入Programming版参与讨论
相关主题
弱问一个virtual function的问题问一下这个cast在java里是怎么work的
问一个C++的问题,关于base class的设计的C++ 弱问一个
C++下减少代码拷贝粘贴谁能给出关于class和type的区别的英文解释
type class是fp吗?C++ virtual function 定义在 derived class 会怎么样?
A C++ inheritance question!friend function 不能virtual 怎么搞呢?
问个C++ virtual function的问题 (转载)请问c++中操作符可以声明为虚函数吗?
c++ inline问题 (转载)[合集] type traits is magic
问个 C++到C的问题abstract Factory 的困惑
相关话题的讨论汇总
话题: overb话题: overd话题: covariant话题: type话题: public