由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - static polymorphism一问
相关主题
Polymorphism是怎么定义的?can struct be derived from?
问一个问题。。Question in C++ complex number implementation
a simple design questionWhat does the default constructor do?
C++里,Base Class如何调用Derived Class的methodQuestion about COM
为什么指向子类对象的基类指针能访问子类中重载的虚函数,而不问一个C++ template的问题
请教java中compareTo的方法C++问题几个
最近学了一下 Goqeustion about separation of interface and implementation in java
请教一个python OOP 实现的问题有懂obj-c 的吗?
相关话题的讨论汇总
话题: derived话题: static话题: base
进入Programming版参与讨论
1 (共1页)
J*****n
发帖数: 4859
1
template
struct base
{
void interface()
{
// ...
static_cast(this)->implementation();
// ...
}
};
struct derived : base
{
void implementation();
};
上面的程序如果用父类指针指向儿子,那似乎是如下的写法:
base *p = new derived()
这里的话,如果已经事先知道了所指向的对象是derived的,那么直接用derivaed的指
针去指就可以了。何必画蛇添足呢?
还是我的理解有问题?
请高手指点一下。
谢谢。
g*****y
发帖数: 7271
2
那里写的这个call法?还是你自己想的?

【在 J*****n 的大作中提到】
: template
: struct base
: {
: void interface()
: {
: // ...
: static_cast(this)->implementation();
: // ...
: }
: };

J*****n
发帖数: 4859
3

是我自己想的,原代码里面没有写怎么用。
所以比较迷糊。不过似乎应该这么写的吧?
请指教。
谢谢。

【在 g*****y 的大作中提到】
: 那里写的这个call法?还是你自己想的?
g*****y
发帖数: 7271
4
应该就是 Derived d; d.interface();

【在 J*****n 的大作中提到】
:
: 是我自己想的,原代码里面没有写怎么用。
: 所以比较迷糊。不过似乎应该这么写的吧?
: 请指教。
: 谢谢。

J*****n
发帖数: 4859
5

那这个叫什么多态?

【在 g*****y 的大作中提到】
: 应该就是 Derived d; d.interface();
g*****y
发帖数: 7271
6
之所以这么叫,是因为在base里面的function interface(),可以调用派生
类的implementation. 所以你可以通过写derived class来customize不同
的implementation。
但是不同于virtual function,这个是在编译时绑定的,你必需明确声明派生类
来调用相应的implementation。所以叫static polymorphism。

【在 J*****n 的大作中提到】
:
: 那这个叫什么多态?

J*****n
发帖数: 4859
7

但你这个做法现实中没什么用阿。
你应经知道了你要定义的是什么类型的东西了,函数重载就可以了,何必这么麻烦。
多态是用父类的指针指向儿子才对吧?

【在 g*****y 的大作中提到】
: 之所以这么叫,是因为在base里面的function interface(),可以调用派生
: 类的implementation. 所以你可以通过写derived class来customize不同
: 的implementation。
: 但是不同于virtual function,这个是在编译时绑定的,你必需明确声明派生类
: 来调用相应的implementation。所以叫static polymorphism。

g*****y
发帖数: 7271
8
函数重载的话,你必须同时重载interface()。如果只是重载implementation
的话,base里的interface()是不会去调用你重载的implementation的。
如果interface里面也有不少code的话,你不会希望每个派生类再复制一遍
interface里的code吧。

【在 J*****n 的大作中提到】
:
: 但你这个做法现实中没什么用阿。
: 你应经知道了你要定义的是什么类型的东西了,函数重载就可以了,何必这么麻烦。
: 多态是用父类的指针指向儿子才对吧?

i*********n
发帖数: 58
1 (共1页)
进入Programming版参与讨论
相关主题
有懂obj-c 的吗?为什么指向子类对象的基类指针能访问子类中重载的虚函数,而不
问个弱问题,C++为什么把interface和implementation分开?请教java中compareTo的方法
Interface segregation principle似乎没啥意义啊最近学了一下 Go
这次Go丢人有点大呀请教一个python OOP 实现的问题
Polymorphism是怎么定义的?can struct be derived from?
问一个问题。。Question in C++ complex number implementation
a simple design questionWhat does the default constructor do?
C++里,Base Class如何调用Derived Class的methodQuestion about COM
相关话题的讨论汇总
话题: derived话题: static话题: base