C++和Java的多继承
多继承:
C++中的类可以直接实现多继承 如:class D:public A,public B,public C{……};
Java中不能直接实现这样的多继承,但是可以用接口(interface)来间接实现 如:
public class A{ ……}
public interface C{
public void c1();
public void c2();
}
public class C extends A implements B{
//若A中有构造函数则在子类中必须手动调用构造函数 super(<参数>);
//必须重写接口B的所有方法
public void c1(){ // 实现接口 }
public void c2(){ //实现接口 }
……
}
从上面的代码我们还可以发现一个细节:C++中类的定义必须在类体的大括号后加上一个分号(;)但是Java中没有这样的要求。
在c++的多继承中,要注意这样一个问题:基类A,子类B、C继承基类A,子类D同时继承自B和C,代码如下:
#include<iostream>
using namespace std;
class A{
public:
int iVarA;
};
class B:public A{ //继承
public:
int iVarB;
};
class C:public A{
public:
int iVarC;
};
class D:public B,public C{
public:
int iVarD;
};
int main(){
D Dtemp;
Dtemp.iVarA = 10; //注意这里产生了歧义 VC6.0报错:error C2385: 'D::iVarA' is ambiguous(歧义的)
return 0 ;
}
产生上面的歧义是由于在Dtemp中变量iVarA的引用是歧义的。这种歧义性是由于D通过类B继承了iVarA的一份拷贝,又通过C继承了iVarA的一份拷贝。
解决这个问题可以有两种方法,其一使用作用域分解运算符:
int main(){
D Dtemp;
Dtemp.B::iVarA = 10;
Dtemp.C::iVarA = 10;
return 0;
}
那么另一种方法就是使用虚基类,详见下一篇..
相关文档:
http://www.trendcaller.com/2009/05/hadoop-should-target-cllvm-not-java.html
Sunday, May 10, 2009
Hadoop should target C++/LLVM, not Java (because of watts)
< type="text/javascript">
digg_url="http://www.trendcaller.com/2009/05/hadoop-should-target-cllvm-not-java.html";
Over the years, ......
项目是基于GMT时间的,在系统启动的时候,我们就会调用TimeZone.setDefault(timeZone)将默认时区设为GMT。
后来突然发现,有时用户选择的时间经过后台一圈后回产生8个小时误差。又是间歇性的,要他重现的时候又偏不来。苦心debug,终于发现在部分线程中,时区还是GMT+8,后台某个调用可能把时区 ......
PROCEDURE user_Login (
i_AuthID IN user_UserPass.UserID%TYPE, --用户代码
i_FunctionCode IN &n ......
转自其他网站
核心提示:第一步
充分理解Socket 1.
什么是socket
所谓socket
通常也称作套接字,用于描述IP
地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网...
推广和普及Java
技术,为国内众多的Java
爱好者提供一个“
平等自由协作创造”
的开放式交流环境,提供Java
专题 ......