大家讨论一下。几个用c语言来模仿c++特性的代码解决方法
大家讨论一下。。。几个用c语言来模仿c++特性的代码
一般的类可以用结构体和指针来模仿。。。
可以用宏来部分模仿函数模板特性。。。
那么
1,如何来模仿类的继承呢。。。
2,如何来模仿虚函数呢。。。
大家提提看法。。。开阔一下眼界。。。谢谢。。。
------解决方案--------------------
难度太大 ,模仿也不会带来任何价值,并且使程序效率降低
不值得去做这种的问题
------解决方案--------------------
ooc.pdf,搜一下,很好的一本书
ps:不会使程序效率低下,不懂不要瞎说,可以增加C代码的可维护性,很有价值和意义的事情。
------解决方案--------------------
看《深度探索C++对象模型》即可,看过了书就没什么值得讨论的内容了。
------解决方案--------------------
C++对这些特性的实现方法可以做为C语言模拟的参考。
如对于继承,C++的做法是令派生类包含基类的成员。在C中,近似的方法是令“派生结构”包含一个“基结构”作为它的成员。另外,对于虚基类,C++的做法一般是令派生类包含一个基类的指针(或者一个表示基类位置的偏移量),C中也可以这样做。
对于虚函数,C++的做法一般是每个类有一个全局的虚函数表,表中存放函数地址,类中包含一个指向该表的指针,在调用虚函数时查表获得函数地址。C中也可以这样做。
这些方法,在 Inside the C++ Object Model 中有详细论述。
其实,用C语言模拟这些特性就是C++引入这些特性时面临的主要问题之一。要知道,早期C++编译器都是将C++编译成C的(再由C编译器编译成机器码)。这是C++的实现方法可以用做C模拟的历史依据。即使是现在,如果研究出一种用C模拟某个特性的好方法,那么它往往也可以被C++所借鉴。关于C++的这段历史,在 The Design and Evolution of C++ 中有详细论述。
------解决方案--------------------
> > 继承是应该包含了“父”结构体(has-a)。。。还是包含了父结构体的各个成员呢(is-a)。。。
看《Effective C++》。
> > 从理论上讲。。。继承么。。。似乎应该是is-a...但是,如果是is-A的话,如何使父类的指针
> > 指向子类呢。。。只能用强制转换了。。。有没有更好的方法不用强制转呢。。。
使用C++。
> > 还有。。。如果一个结构体继承了两个有虚函数的父结构体。那么。。。应该是一个vtable
> > 指针。。。还是两个vatable指针呢。。。
看《深度探索C++对象模型》。
一般的类可以用结构体和指针来模仿。。。
可以用宏来部分模仿函数模板特性。。。
那么
1,如何来模仿类的继承呢。。。
2,如何来模仿虚函数呢。。。
大家提提看法。。。开阔一下眼界。。。谢谢。。。
------解决方案--------------------
难度太大 ,模仿也不会带来任何价值,并且使程序效率降低
不值得去做这种的问题
------解决方案--------------------
ooc.pdf,搜一下,很好的一本书
ps:不会使程序效率低下,不懂不要瞎说,可以增加C代码的可维护性,很有价值和意义的事情。
------解决方案--------------------
看《深度探索C++对象模型》即可,看过了书就没什么值得讨论的内容了。
------解决方案--------------------
C++对这些特性的实现方法可以做为C语言模拟的参考。
如对于继承,C++的做法是令派生类包含基类的成员。在C中,近似的方法是令“派生结构”包含一个“基结构”作为它的成员。另外,对于虚基类,C++的做法一般是令派生类包含一个基类的指针(或者一个表示基类位置的偏移量),C中也可以这样做。
对于虚函数,C++的做法一般是每个类有一个全局的虚函数表,表中存放函数地址,类中包含一个指向该表的指针,在调用虚函数时查表获得函数地址。C中也可以这样做。
这些方法,在 Inside the C++ Object Model 中有详细论述。
其实,用C语言模拟这些特性就是C++引入这些特性时面临的主要问题之一。要知道,早期C++编译器都是将C++编译成C的(再由C编译器编译成机器码)。这是C++的实现方法可以用做C模拟的历史依据。即使是现在,如果研究出一种用C模拟某个特性的好方法,那么它往往也可以被C++所借鉴。关于C++的这段历史,在 The Design and Evolution of C++ 中有详细论述。
------解决方案--------------------
> > 继承是应该包含了“父”结构体(has-a)。。。还是包含了父结构体的各个成员呢(is-a)。。。
看《Effective C++》。
> > 从理论上讲。。。继承么。。。似乎应该是is-a...但是,如果是is-A的话,如何使父类的指针
> > 指向子类呢。。。只能用强制转换了。。。有没有更好的方法不用强制转呢。。。
使用C++。
> > 还有。。。如果一个结构体继承了两个有虚函数的父结构体。那么。。。应该是一个vtable
> > 指针。。。还是两个vatable指针呢。。。
看《深度探索C++对象模型》。