门户网站建设安全管理制度,如何做网站的后台,国际网站如何推做推广,自驾游网站模板继承和多态是c的灵魂#xff0c;如何使用c语言模拟这一机制#xff0c;是使用c语言实现面向对象开发的关键。
一. 不存在继承
/*
class TestClass
{
private:int a;int b;
public:void func0(int param0,int param1);void func1(int param2,int param3);
};
*/
str…继承和多态是c的灵魂如何使用c语言模拟这一机制是使用c语言实现面向对象开发的关键。
一. 不存在继承
/*
class TestClass
{
private:int a;int b;
public:void func0(int param0,int param1);void func1(int param2,int param3);
};
*/
struct TestClass
{int a;int b;
};void TestClass_func0(void *p, int param0,int param1)
{struct TestClass* this (struct TestClass*)p;//....
}void TestClass_func1(void *p, int param2,int param3)
{struct TestClass* this (struct TestClass*)p;//....
}int main(int argc,char* argv[])
{struct TestClass t;TestClass_func1(t,0,0);TestClass_func0(t,0,0);return 0;
}二. 存在继承
/*
class Base
{virtual void func(int param);
};class SubA: public Base
{
private:int a;
public:void func(int param) override;
};
class SubB: public Base
{
private:int b;
public:void func(int param) override;
};int main(int argc,char* argv[])
{Base* pb;SubA sa;SubB sb;pb sa; pb-func(0);pb sb; pb-func(0);
}
*/struct Base
{void(*func)(void* p, int param);
};struct SubA
{struct Base base;int a;
};
void SubA_func(void* p, int param)
{struct SubA* this (struct SubA*)p;printf(SubA a: %d.\r\n,this-a);
}struct SubB
{struct Base base;int b;
};
void SubB_func(void* p, int param)
{struct SubB* this (struct SubB*)p;printf(SubB b: %d.\r\n,this-b);
}int main(int argc,char* argv[])
{struct Base* pb;struct SubA sa; sa.base.func SubA_func;struct SubB sb; sb.base.func SubB_func;pb sa; pb-func(0);pb sb; pb-func(0);
}
三. 从C到C的自动化转换
从第一节和第二节我们清晰地看到C和C是如何对应起来的这个对应过程从侧面也证明了C是C的超集C完全兼容CC代码总是可以写成C的形式。但是面对稍微复杂的项目这个改写过程将变得极其痛苦而C编译器一定程度上就是为了将这个过程自动化而出现的当然我们最终要的不是C的源码而是能够运行的二进制机器码所以C编译器一步到位地生成了机器码将中间过程封闭起来。了解了这个过程可以对C与C之间的关系理解的更为深刻。