免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: pan_0326
打印 上一主题 下一主题

Coo - C语言面向对象编程 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2010-06-04 10:36 |只看该作者
本帖最后由 xianliang 于 2010-06-04 10:38 编辑
用c语言实现c++的功能还不如用c++.
liexusong 发表于 2010-06-03 11:04



    就是,要做也做得更有特色,更有简洁明了。

    我给个不太恰当的比喻,C像半自动步枪,如AK47;C++像机关枪,自动化程度高。各有用处,无法替代。AK加个瞄准,还可以当狙击使,Irac人就是这么用的。不过不专业。

论坛徽章:
0
22 [报告]
发表于 2010-06-04 11:10 |只看该作者
就是,要做也做得更有特色,更有简洁明了。

    我给个不太恰当的比喻,C像半自动步枪,如AK4 ...
xianliang 发表于 2010-06-04 10:36



C++还不断进化呢,为什么要求C一定要保持原状成为标本?
C语言可以通过宏获得部分template功能,现在可以通过Coo更方便的OO,这样有什么不好?
C++中不是也有一些狂热者,甚至觉得有了template可以不OO了,把OO去掉怎么样?
你看看coo.h的简单,就知道是值得的.

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
23 [报告]
发表于 2010-06-04 11:32 |只看该作者
我只说一件事,

C++一开始的面向对象就是用C的宏实现的,所以楼主只是实现了一个原始的C++。

论坛徽章:
0
24 [报告]
发表于 2010-06-04 11:45 |只看该作者
我只说一件事,

C++一开始的面向对象就是用C的宏实现的,所以楼主只是实现了一个原始的C++。
zhaohongjian000 发表于 2010-06-04 11:32



我第一次听到这种说法,我不知道怎么用宏简单地实现同名函数
编译器用特殊的预处理程序将C++代码变成C再编译倒是最简单的方法

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
25 [报告]
发表于 2010-06-04 11:49 |只看该作者
我第一次听到这种说法,我不知道怎么用宏简单地实现同名函数
编译器用特殊的预处理程序将C++代码变成 ...
pan_0326 发表于 2010-06-04 11:45

可能我说的有误,时间太久记不清,先去吃饭,回来查查,看看是用宏还是特殊的预处理程序。基本就是这么个情况。

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
26 [报告]
发表于 2010-06-04 12:23 |只看该作者
确实是我说的有误,最初版本是使用了特殊的预处理程序,实在抱歉。

但我的基本结论不变。

论坛徽章:
0
27 [报告]
发表于 2010-06-04 13:03 |只看该作者
回复 1# pan_0326


     我关心的是:与C++比有啥区别?比C++有啥优点?克服了C++的哪些不足?

论坛徽章:
0
28 [报告]
发表于 2010-06-04 13:19 |只看该作者
可以用简单的方法把OO的设计方法引入C
支持

论坛徽章:
0
29 [报告]
发表于 2010-06-04 15:46 |只看该作者
本帖最后由 pan_0326 于 2010-06-08 16:35 编辑
回复  pan_0326


     我关心的是:与C++比有啥区别?比C++有啥优点?克服了C++的哪些不足?
seecu 发表于 2010-06-04 13:03



Coo的初衷只是让C可以OO,由于不是原生支持,当然会有不少缺点:
1. 书写仍然不能像C++那么简单,特别是虚函数
2. 无法实现同名函数
3. 无法自动构造和析构

但也不是样样不如C++
1. 嵌入基类的位置灵活,C++只能在首部
class CBase
{
public:
    double d;
};
class CThis : public CBase
{
public:
    int i;
    virtual int GetInt() const;
};
sizeof(CBase)是8,sizeof(CThis)是24,不是16.因为翻译成Coo如下:
struct VThis; //虚函数类
typedef struct CThis
{
    VT(struct VThis) //虚函数表指针
    EXTENDS(CBase) //继承
    int i;
} CThis;
但Coo由于继承的语法更灵活,所以可以这样改:
struct VThis; //虚函数类
typedef struct CThis
{
    VT(struct VThis) //虚函数表指针
    int i; //提前数据,找齐
    EXTENDS(CBase) //继承
} CThis;
基类数据嵌入可以不发生在首部,现在sizeof(CThis)是16,最紧缩状态.

2. 类数据中嵌入虚函数表指针可以有多种方法,而C++只有一种
class CBase
{
public:
    int a
    virtual int GetA() const;
};
class CInterface
{
public:
    virtual void SetA(int a);
};
class CThis : public CBase, public CInterface
{
};
sizeof(CBase)是8,sizeof(CInterface)是4,sizeof(CThis)是12.翻译成Coo如下:
struct VBase; //虚函数类
typedef struct CBase
{
    VT(struct VBase) //虚函数表指针
    int a;
} CBase;
struct VInterface;
typedef struct CInterface
{
    VT(struct VInterface)
} CBase;
struct VThis;
typedef struct CThis
{
    EXTENDS2(CBase,struct VThis)
    EXTENDS(CInterface)
} CThis;
但Coo可以不在类数据中嵌入虚函数表指针:
struct VBase; //虚函数类
typedef struct CBase
{
    int a;
} CBase;
struct VInterface;
typedef struct CInterface
{
} CBase;
struct VThis;
typedef struct CThis
{
    EXTENDS(CBase)
    EXTENDS(CInterface)
} CThis;
sizeof(CBase)是4,sizeof(CInterface)是0,sizeof(CThis)是4.使用时可能要将
虚函数表指针当参数转入需要函数.
下面再展示一种混合方式:
struct VBase; //虚函数类
typedef struct CBase
{
    VT(struct VBase) //虚函数表指针
    int a;
} CBase;
struct VInterface;
typedef struct CInterface
{ //无虚函数表指针
} CBase;
struct VThis;
typedef struct CThis
{
    EXTENDS(CInterface) //空的,占位
    EXTENDS2(CBase,struct VThis)
} CThis;
sizeof(CBase)是8,sizeof(CInterface)是0,sizeof(CThis)是8.主继承链嵌入
虚函数表指针,而接口等不嵌入虚函数表指针,有点像java

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
30 [报告]
发表于 2010-06-04 16:07 |只看该作者
回复 20# fera

这东西我已经下载过2次: 刚出现在cu, 以及回复在那个interface帖后。
结果是(我知道虽然文件很小, 但还是)没耐心看完就删了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP