函数已有主体,C++多重继承 父类存在同名函数
问题出在域名查找函数已有主体。
Inherit::IBase2::
这个含义代表从Inherit类域名找IBase2类域名再找fun1.
尝试把Inherit::去掉吧,没什么用。
这个既不是多态,也不重载,感觉只是把基类的虚函数的实现改到子类中实现了,实现的还是基类的函数。但语法上还是纯虚函数,不能实例化。
而实际上子类并没有生成虚函数,只有一个vptr,而vtable里面没有函数。
class IBase1{public: virtual int func1() = 0;};class IBase2{public: virtual int func1() = 0;};class Inherit: public virtual IBase1 , virtual public IBase2{public: virtual int IBase1::func1(){printf(“IBase1 func1 \n”); return 1;} virtual int IBase2::func1();//{printf(“IBase2 func1 \n”); return 2;}};int Inherit::func1(){ printf(“IBase2 func1 \n”); return 0;}main中 IBase1 *p1 = new Inherit(); //打印 “IBase1 func1” p1->func1(); IBase2 *p2 = new Inherit(); //打印”IBase2 func1″ p2->func1();vc2005是可以编译的过,如何把两个都在类外定义,没有找到方法。
C语言的函数名后有一对圆括号,括号内有函数参数,但参数可有可无.
这是C的语法规定的,函数名的后面一定要带括号。但括号里面不一定带有参数。这要根据你的函数是否需要参数接口而定,像main()这个入口函数它就不需要用户传递任何参数给它,所以就没有提供参数接口(其实main是有带有参数接口的,用来存放命令行的参数,原型请自己在网上找)。而average函数是一个求平均数的函数,试问一下,如果你告诉系统你要对那些数求平均数,你说系统有这么神奇知道想求哪些数的平均数吗?明显是不可能的,那么要怎么让系统知道你想求的数呢,那就要靠参数传递来实现。