c++ java c#语言特性对比

1.c++与Java的域初始化:

C++注释:在C++中,不能直接初始化实例域。所有的域必须在构造器中设置。
Java却可以,如:

class Employee{
...
 private String name="";
}



2.在内存机制中,父类和子类是占用同一块内存的
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;




4.Java中子类的可见性不能小于基类的可见性,但c++中子类的可见性可以小于基类的可见性,采用using。通过using声明把可见成员函数变为子类的私有成员:

class BC{//c++
...
void set_x(float a) { x = a;}
}
class DC : public BC{
..
using BC::set_x;//将set_x变为DC的私有成员
}




5.关于类型转换:
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方法呢?)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值