您的位置:首页 > 编程语言 > C语言/C++

java转c/c++需知的基本概念

2012-05-16 08:46 405 查看
很多同学是从Java语言进入编程世界的,但随着知识的增加与深入,逐渐认识到C/C++语言的重要性,所以很多比较有远见的程序员开始学习C/C++语言的开发。

从Java到C++,最重要的区别是面向对象的区别,C++的类可以多重继承,而Java只能有单一的父类,看起来Java像是个女儿国,而C++才是个真正的国度。当然Java也有Java的好处,那就是生活简单,像处女一样。

区别如下:

1.定义类

如下一个简单的Java类:

[code]public class Array{

private int length=0;

public int getLength() {
return length;
}
}


[/code]

在C++语言中的定义应该如下所示:

[code]class Array{

private:
int length;

public:
Array(){
length=0;
}

int getLength() const {
return length;
}
};


[/code]

2.类的继承

我们执行一个操作,定义一个类A和一个类B,而类B继承自类A,在Java语言中应该这样写:

[code]public class A{
}

public class B extends A{
}


[/code]

在C++语言中应该这样写:

[code]class A{
};

class B:public A{
};


[/code]

3.方法重写

下面展示一个Java语言的方法重写过程:

[code]public class A{
public void sayHello(){
System.out.println("A say : Hello World");
}
}

public class B extends A{
public void sayHello() {
System.out.println("B say : Hello World");
}
}


[/code]

那么这个功能在C++语言中又该如何去写呢?我们先写一段程序,再分析,如下:

[code]class A{
public:
void sayHello(){
printf("A say : Hello World");
}
};

class B:public A{
public:
void sayHello(){
printf("B say : Hello World");
}
};


[/code]

这样去写看上去好像没有问题,这也是Java开发人员爱犯的一个错误,如果说她没有问题的话,我们写一段调用她的程序,就立即能够看出问题了,调用程序如下所示:

[code]int main() {
A* a = new B;
a->sayHello();
return 0;
}


[/code]

运行一下,我们看看输出结果:

A say : Hello World

我们使用的对象明明就是B实例,为什么输出的仍然是A的输出信息呢,这是因为我们的sayHello方法是实函数,这种方法一旦定义,那么它就属于定义它的那个类,不会再改变了,是不能被重写的。如果想让程序在运行过程中自动查找sayHello方法的所属类,应该把这个方法定义为虚函数,则上述类的正确写法应该如下所示:

[code]class A{
public:
virtual void sayHello(){
printf("A say : Hello World");
}

virtual ~ A(){
}
};

class B:public A{
public:
virtual void sayHello(){
printf("B say : Hello World");
}

virtual ~B(){
}
};


[/code]

4.接口

在C++语言中没有接口的概念,但是可以用纯虚类来代替。如下所示:

[code]class IPeople{
public:
virtual int getAge()=0;
virtual string getName()=0;
virtual ~IPeople(){
}
};

class Man:public IPeople{
public:
Man(int age,string name){
this->age=age;
this->name=name;
}

virtual string getName(){
return this->name;
}

virtual int getAge(){
return this->age;
}

virtual ~Man(){
}

private:
int age;
string name;
};

int main() {
Man* m= new Man(8,"xiao ming");
cout<<m->getName()<<endl;
return 0;
}


[/code]

其中的IPeople类是一个纯虚类,其中只有纯虚函数,这样的类和接口的概念是一样的,继承者必须实现所有的纯虚函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java class 语言 string c 生活