我以前听说用纯C也能写出面向对象(C++)程序,不知各位高手有何高见,怎么写啊!

时间:2022-03-12 17:24:40
// 我试着写了一个,是关于成员函数的,请各位大虾指点
// 谢谢


#include <stdio.h>

// 类 CTest declare
struct CTest
{
    int (*Test)();
};

// class CTest's member function define
int Test()
{
    printf("The test is Success!\n");
    return 1;
}



// 生成对象
void MakeObject(CTest *pObject)
{
    pObject->Test=Test;
    return;
}



//-------------------------------------------------------------------------
int main(int argc, char* argv[])
{
    struct CTest a;
    MakeObject(&a); // 生成对象

    a.Test();
    return 0;
}

36 个解决方案

#1


大虾能给我介绍用纯C写C++的经验么?因为我们写M3HPC的开发环境没有C++,只有纯纯的C,好头疼! 谢谢

#2


// 类 CTest declare
struct CTest
{
int (*Test)();
};

// class CTest's member function define
int Test()
{
printf("The test is Success!\n");
return 1;
}



// 生成对象
void MakeObject(CTest *pObject)
{
pObject->Test=Test;
return;
}



//-------------------------------------------------------------------------
int main(int argc, char* argv[])
{
struct CTest a;
MakeObject(&a); // 生成对象

a.Test();
return 0;
}
我重贴程序,刚才的怎么乱了

#3


c是用来这么写的??如果没有oo语言的编译器就别强行套用oo方式,你不觉得用c这样写很傻?

#4


to guoyichao(guoyichao 我知道这样很傻,我只是打算想出个办法,让C编译器也可以OO

#5


我觉得面向对象仅仅是一种思想!!! 注意是思想.

你可以把C++中的CLASS 和C 中的STRUCT 比较以下,其实差不了多少!!!

可以在STRUCT 中放入指向函数的指针,用来模仿C++中的成员函数!!!!!!!!!!!

不知道,对你有没有启发!!!!!!!!

#6


你可以自己做个Cfront。

#7



    我也想知道的!

#8


cfront好像可以把C++的代码转成C

#9


曾听说早期C++编译器先将c++程序翻译为c程序在用c编译器再进行编译。另用c语言可通过不同源文件封装模块等方面,不知C的结构化与C++的面向对象各自概念上是否存在联系?

#10


当然可以.
但是,除了实现的难度之外,你能保证你的实现的效率有C++编译器实现他们的
效率高吗?

#11


哪位大侠给个具体的例子吧!

#12


不可以的,只能是写出基于对象的!


#13


up up

#14


应该可以,在<inside the c++ object model >里面的OO代码都可以转换成
C的伪代码。只是用C实现OO要好复杂。

#15


C当然可以实现面向对象。但是这不是C的风格。在网上有很多这方面的文章,你可以找找看。

#16


不可以
这是很明显的

#17


可以 但没必要
不要犯傻 啊 
有好工具 为什么要用低级的
用c写 就需要自己/c编译器代替编译器去做那些
本应是c++编译器作的事

#18


to superzjx2000(锥子) : 你当我不想用C++呀! 我要写程序的平台只有一个C的开发环境(not pc)

#19


to myan():
    谢谢,你能具体一点说说该怎样实现如成员函数,成员变量的保护,继承,多态,rtti么? 微软MFC中的RTTI不就是模仿出来的么,(但它使用C++模仿的)V_V

#20


好难

#21


to Nepton(小牛牛) :-) :

in theory, you can use c to emulate c++; in practice, it is very hard to write such kind of code. it will also make your code very unreadable, and difficult to maintain in the future.

so why do you want to do it?

oo is not the only way for writing decent programs.

#22


不可能的,OO的实现是靠编译器实现的。
你要强行用C去处理OO的东西就要类似编译器的东西作预处理。
C++雏形版本就是在C上面加个包帮助编译,但是动态绑定还是没有实现,后来真个编译系统重写后(就是C++第一个版本出来)才实现动态绑定,有了OO的基本特性。去看看C++的演变这本书就知道了。

#23


那有没有转换器能够把写完的C++转换为C

#24


当然可以了,不过,在c里面没有多态,封装,继承这些语法上的支持,要你自己想办法来编程实现他:)不象c++,语法上已经支持这些了.换句话说,oo只是一种思想,如果思想你掌握了,甚至用汇编也可以,就是没有语法上的支持,要麻烦很多而已

#25


我记得www.embedded.com有一篇文章,讲如何用C实现Java模型的OO。你可以去找一找。写MiniGUI的魏永明先生也写过一篇文章讲这个问题。93年的时候还有一本书,专门讲如何用C来实现基本面向对象。

我对这个技术不是很感兴趣。真的要用面向对象,直接用C++不是更好吗?C是很重要的一种语言,向下能够提供对机器的全面控制,向上可以提供相当完备的基于对象(object-based)的抽象。但如果再需要更高级的抽象能力,就要付出很大的代价。所以你就应该考虑C++或者Python之类的语言了。

#26


想想看成员函数
其中调用之 "." "->"
你怎么实现?

#27


RTTI , 成员变量的保护都很Easy 的 ,自己琢磨琢磨就行了
可是...还有太多东西难以模拟的!

#28


对,基本思路就是这样的,不过
// 类 CTest declare
struct CTest
{
int (*Test)(CTest * this);
};

// class CTest's member function define
int Test(CTest * this)
{
printf("The test is Success!\n");
return 1;
}



// 生成对象
void MakeObject(CTest *pObject)
{
pObject->Test=Test;
return;
}

然后用些宏来完成这些功能,不会比C++麻烦很多。

#29


superzjx2000(锥子) :人家说的很明白了嘛,只有C,没有C++.
象很多手机开发包中,就没有C++的东西。

#30


即使真的可以,也只有研究的价值而毫无可取之处

#31


有C已经很不错了,至少比
LDA $1023,X
STA $2047,X
DEX
BNE $????
PHA
PHP
JSR $XXXX

强的多吧!
知足常乐,呵呵

#32


The C++ Programming Language, by Bjarne Stroustrup

1.6 C and C++

Knowning C is not a prerequisite for learning C++.Programming in C encourages many techniques and tricks that are rendered unnecessary by C++ language features.For example,explicit type conversion(casting) is less frequently needed in C++ than it is in C.However,good C programs tend to be C++ programs.For example,every program in Kernighan and Ritchie,The C programming language(2nd Edition),is a C++ program.Experience with any statically typed language will be a heap when learning C++.


看看Kernighan and Ritchie,The C programming language(2nd Edition)吧。

#33


告诉各位大仙:“只有想不到的,没有做不到的!”

#34


to  Nepton(小牛牛)
       那你为什么不用c啊  prototype 说的对
    用c写c++ 其程序代码是很没风格的  
         但我想你赢定要挟写的话  要注意的是思想
       而不是代码的相似

#35


就是c++是在oo思想下产生的语言,支持oo更容易些

#36


只能处理到基于对象这层,不能模拟到面向对象这层。

#1


大虾能给我介绍用纯C写C++的经验么?因为我们写M3HPC的开发环境没有C++,只有纯纯的C,好头疼! 谢谢

#2


// 类 CTest declare
struct CTest
{
int (*Test)();
};

// class CTest's member function define
int Test()
{
printf("The test is Success!\n");
return 1;
}



// 生成对象
void MakeObject(CTest *pObject)
{
pObject->Test=Test;
return;
}



//-------------------------------------------------------------------------
int main(int argc, char* argv[])
{
struct CTest a;
MakeObject(&a); // 生成对象

a.Test();
return 0;
}
我重贴程序,刚才的怎么乱了

#3


c是用来这么写的??如果没有oo语言的编译器就别强行套用oo方式,你不觉得用c这样写很傻?

#4


to guoyichao(guoyichao 我知道这样很傻,我只是打算想出个办法,让C编译器也可以OO

#5


我觉得面向对象仅仅是一种思想!!! 注意是思想.

你可以把C++中的CLASS 和C 中的STRUCT 比较以下,其实差不了多少!!!

可以在STRUCT 中放入指向函数的指针,用来模仿C++中的成员函数!!!!!!!!!!!

不知道,对你有没有启发!!!!!!!!

#6


你可以自己做个Cfront。

#7



    我也想知道的!

#8


cfront好像可以把C++的代码转成C

#9


曾听说早期C++编译器先将c++程序翻译为c程序在用c编译器再进行编译。另用c语言可通过不同源文件封装模块等方面,不知C的结构化与C++的面向对象各自概念上是否存在联系?

#10


当然可以.
但是,除了实现的难度之外,你能保证你的实现的效率有C++编译器实现他们的
效率高吗?

#11


哪位大侠给个具体的例子吧!

#12


不可以的,只能是写出基于对象的!


#13


up up

#14


应该可以,在<inside the c++ object model >里面的OO代码都可以转换成
C的伪代码。只是用C实现OO要好复杂。

#15


C当然可以实现面向对象。但是这不是C的风格。在网上有很多这方面的文章,你可以找找看。

#16


不可以
这是很明显的

#17


可以 但没必要
不要犯傻 啊 
有好工具 为什么要用低级的
用c写 就需要自己/c编译器代替编译器去做那些
本应是c++编译器作的事

#18


to superzjx2000(锥子) : 你当我不想用C++呀! 我要写程序的平台只有一个C的开发环境(not pc)

#19


to myan():
    谢谢,你能具体一点说说该怎样实现如成员函数,成员变量的保护,继承,多态,rtti么? 微软MFC中的RTTI不就是模仿出来的么,(但它使用C++模仿的)V_V

#20


好难

#21


to Nepton(小牛牛) :-) :

in theory, you can use c to emulate c++; in practice, it is very hard to write such kind of code. it will also make your code very unreadable, and difficult to maintain in the future.

so why do you want to do it?

oo is not the only way for writing decent programs.

#22


不可能的,OO的实现是靠编译器实现的。
你要强行用C去处理OO的东西就要类似编译器的东西作预处理。
C++雏形版本就是在C上面加个包帮助编译,但是动态绑定还是没有实现,后来真个编译系统重写后(就是C++第一个版本出来)才实现动态绑定,有了OO的基本特性。去看看C++的演变这本书就知道了。

#23


那有没有转换器能够把写完的C++转换为C

#24


当然可以了,不过,在c里面没有多态,封装,继承这些语法上的支持,要你自己想办法来编程实现他:)不象c++,语法上已经支持这些了.换句话说,oo只是一种思想,如果思想你掌握了,甚至用汇编也可以,就是没有语法上的支持,要麻烦很多而已

#25


我记得www.embedded.com有一篇文章,讲如何用C实现Java模型的OO。你可以去找一找。写MiniGUI的魏永明先生也写过一篇文章讲这个问题。93年的时候还有一本书,专门讲如何用C来实现基本面向对象。

我对这个技术不是很感兴趣。真的要用面向对象,直接用C++不是更好吗?C是很重要的一种语言,向下能够提供对机器的全面控制,向上可以提供相当完备的基于对象(object-based)的抽象。但如果再需要更高级的抽象能力,就要付出很大的代价。所以你就应该考虑C++或者Python之类的语言了。

#26


想想看成员函数
其中调用之 "." "->"
你怎么实现?

#27


RTTI , 成员变量的保护都很Easy 的 ,自己琢磨琢磨就行了
可是...还有太多东西难以模拟的!

#28


对,基本思路就是这样的,不过
// 类 CTest declare
struct CTest
{
int (*Test)(CTest * this);
};

// class CTest's member function define
int Test(CTest * this)
{
printf("The test is Success!\n");
return 1;
}



// 生成对象
void MakeObject(CTest *pObject)
{
pObject->Test=Test;
return;
}

然后用些宏来完成这些功能,不会比C++麻烦很多。

#29


superzjx2000(锥子) :人家说的很明白了嘛,只有C,没有C++.
象很多手机开发包中,就没有C++的东西。

#30


即使真的可以,也只有研究的价值而毫无可取之处

#31


有C已经很不错了,至少比
LDA $1023,X
STA $2047,X
DEX
BNE $????
PHA
PHP
JSR $XXXX

强的多吧!
知足常乐,呵呵

#32


The C++ Programming Language, by Bjarne Stroustrup

1.6 C and C++

Knowning C is not a prerequisite for learning C++.Programming in C encourages many techniques and tricks that are rendered unnecessary by C++ language features.For example,explicit type conversion(casting) is less frequently needed in C++ than it is in C.However,good C programs tend to be C++ programs.For example,every program in Kernighan and Ritchie,The C programming language(2nd Edition),is a C++ program.Experience with any statically typed language will be a heap when learning C++.


看看Kernighan and Ritchie,The C programming language(2nd Edition)吧。

#33


告诉各位大仙:“只有想不到的,没有做不到的!”

#34


to  Nepton(小牛牛)
       那你为什么不用c啊  prototype 说的对
    用c写c++ 其程序代码是很没风格的  
         但我想你赢定要挟写的话  要注意的是思想
       而不是代码的相似

#35


就是c++是在oo思想下产生的语言,支持oo更容易些

#36


只能处理到基于对象这层,不能模拟到面向对象这层。