免费注册 查看新帖 |

Chinaunix

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

我想,理解了 C 的面向对象,也就理解了 C++  关闭 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2008-05-21 10:37 |只看该作者
原帖由 doctorjxd 于 2008-5-20 10:07 发表
《Inside C++ Object Model》是我喜爱的一本书,也推荐给大家。

可惜翻译的很有争议

论坛徽章:
0
42 [报告]
发表于 2008-05-21 10:39 |只看该作者
C++标准库都卖了有点可惜,这个东西是用来查的啊

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
43 [报告]
发表于 2008-05-21 15:41 |只看该作者
原帖由 zhujiang73 于 2008-5-20 14:43 发表
最简单的继承:

#include

typedef struct
{  
    int ma;
} A;

typedef struct
{
    A parent;
    int mb;
} B;

int main (int argc, char *argv[])
{
    B   b;
    B   *pb;    ...


加上成员函数:

#include <stdio.h>

typedef struct
{
    void   *p;  
    int     ma;   
} A;

typedef struct
{
    A       parent;
    void    *p;
    int     mb;
} B;


typedef struct
{
    void   (*set_ma)(void *this, int a);  
} AC;

typedef struct
{
    AC     parent;
    void   (*set_mb)(void *this, int b);  
} BC;

void  A_set_ma(void *this, int a)
{
    ((A*)this)->ma = a;
}  

void  B_set_mb(void *this, int b)
{
    ((B*)this)->mb = b;   
}

void  AC_init(AC *pac)
{
    pac->set_ma = A_set_ma;      
}

void  BC_init(BC *pbc)
{
    AC_init((AC*)pbc);
    pbc->set_mb = B_set_mb;   
}

void  A_init(A *pa, AC *pac)
{
    pa->p = (void*)pac;
}

void  B_init(B *pb, BC *pbc)
{
    pb->p = (void*)pbc;
}

int main (int argc, char *argv[])
{
    BC  bc;
   
    B   b1, b2;
    B   *pb1, *pb2;   

    pb1 = &b1;
    pb2 = &b2;

    BC_init(&bc);
   
    B_init(pb1, &bc);
    B_init(pb2, &bc);


    ((AC*)(pb1->p))->set_ma((void*)pb1, 10);

    ((AC*)(pb2->p))->set_ma((void*)pb2, 100);
   
    ((BC*)(pb1->p))->set_mb((void*)pb1, 20);

    ((BC*)(pb2->p))->set_mb((void*)pb2, 200);
   

    printf("b1.ma = %d   b1.mb = %d \n", b1.parent.ma, b1.mb);

    printf("b2.ma = %d   b2.mb = %d \n", b2.parent.ma, b2.mb);


    return  0;
}

论坛徽章:
0
44 [报告]
发表于 2008-05-21 15:49 |只看该作者
原帖由 ypxing 于 2008-5-19 17:23 发表
最理解面向对象的是习惯于使用面向对象方法建模的人,虽然他们并不见得会使用面向对象语言
最不理解面向对象的是计算机,

面向对象语言只是将面向对象建模者的思想转换为计算机能认识的01

我认为,建模方 ...


有道理,其实面象对象是一种思维方式,如果没有这种概念,那么也有可能用面向对象的语言写出非面象对象的程序,或者不完全的面象对象的程序,呵呵, 讨论过很多年的问题了

[ 本帖最后由 chzht001 于 2008-5-21 15:52 编辑 ]

论坛徽章:
0
45 [报告]
发表于 2008-05-21 16:18 |只看该作者
to  #43 楼:

你这是在学C++,不要被C++的不良思想束缚,建议逐渐放弃C++。

[ 本帖最后由 eftp 于 2008-5-21 16:25 编辑 ]

论坛徽章:
0
46 [报告]
发表于 2008-05-21 17:01 |只看该作者
c++滴不会,飘过

论坛徽章:
0
47 [报告]
发表于 2008-05-21 17:06 |只看该作者
我没研究过 GObject , 搜了一些资料看了一下, 大概是C++思想的C语言的再现,没什么创意,价值不大。

一家之言。

论坛徽章:
0
48 [报告]
发表于 2008-05-21 20:31 |只看该作者
原帖由 flw 于 2008-5-19 17:00 发表
初学 OO 的话,还是从一个支持 OO 语法的语言开始吧。
当然,并不是说 C 就不可以 OO,
而是说,
无论是梁羽生笔下吕四娘的飞花摘叶皆可伤人,还是金庸笔下令狐冲的无招胜有招,
都是指融会贯通之后的一种上 ...


太有才了,
赞一个,还是应该脚踏实地,如履薄冰

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
49 [报告]
发表于 2008-05-21 22:03 |只看该作者
原帖由 eftp 于 2008-5-21 17:06 发表
我没研究过 GObject , 搜了一些资料看了一下, 大概是C++思想的C语言的再现,没什么创意,价值不大。

一家之言。



GObject 是 GNOME 的基石,GNOME 的成功大家都看得见。

论坛徽章:
0
50 [报告]
发表于 2008-05-22 09:44 |只看该作者
面向对象是思想,C++是一种程序语言,一种工具而已
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP