1.c++与Java的域初始化:
C++注释:在C++中,不能直接初始化实例域。所有的域必须在构造器中设置。Java却可以,如:
class Employee{
...
private String name="";
}
3.Java中(核心技术基础篇第八版152)如果一个方法不是private,static,final方法,将采用动态绑定(真的是这样吗)
c++中的多态有三个前提条件:
(1)必须存在一个继承体系结构
(2)继承体系结构中的一些类必须具有同名的virtual成员函数(virtual是关键字)
(3)至少有一个基类类型的指针或基类类型的引用。这个指针或引用可用来对virtual成员函数进行调用
对于第三点:
如
class A{//c++
public :
virtaul void sayHi(){cout<<"Just hi"<<endl;};
}
class B:public A{
virtaul void sayHi(){cout<<"Hi,I thinker"<<endl;};
}
class C:public A{
virtaul void sayHi(){cout<<"Hi,I tailor"<<endl;};
}
//main 函数
A* p;//一个基类类型的指针
if...
p = new B;
if...
p = new C;
p->sayHi();
delete p;
class BC{//c++
...
void set_x(float a) { x = a;}
}
class DC : public BC{
..
using BC::set_x;//将set_x变为DC的私有成员
}
Java中类型转换失败会抛出异常,c++则返回null
6.C++中没有提供表示抽象类的特殊关键字,只要有一个纯虚函数,这个类就是抽象类。定义纯虚函数的方法:
class Person//c++
{
public :
virtual string getDescription()=0;
}
7.c++中没有根类,不过,每个指针勾都可以转换成void*.c++和c#的根类都是object
8.Java中的hashcode方法:hashCode方法定义在Object类中,因此每个对象都有一个默认的散列码,其值为对象的存储地址。(注意:stringBuffer类中没有定义hashCode方法,其对象的散列码是由object类的默认hashCode方法导出的对象存储地址)(那c#中有没有hashCode方法呢?)