Java/C++
3323 ワード
いっしょに
Java/C++はいずれもオブジェクト向けの第3世代コンピュータの高度なプログラミング言語であり、その本質は同じであるが、文法には違いがあり、少し注意しないと混同されやすい.本文はいくつかのこの2つの言語の違いを総括して、参考に供します.
二、C++
C++という言語では、そのクラスにとってメンバーアクセスタイプにはpublic、protected、privateがあります.その継承方式についても共有継承、保護継承、私有継承に分けられる.また,C++には虚関数,純虚関数の区別があり,上書き,隠蔽の区別がある.比較的複雑です.
その多様性については、ベース・クラス・ポインタが派生クラスを指す場合、ベース・クラス・ポインタはベース・クラス内の既存のメンバーにのみアクセスでき、派生クラス固有のメンバーにはアクセスできません.派生クラスでベースクラスのメンバーを上書きしても、ベースクラスのメンバーをクラス派生クラスのメンバーに置き換えるだけで、このメンバーはベースクラスの所有であり、よく見られるいくつかのドリルスルーの問題では、派生クラスがベースクラスを上書きしたり、ベースクラスを隠したりすることが多いことを理解しています.上書きと非表示には大きな違いがあります.上書きは元のものではありません.非表示は派生クラスオブジェクトにとってアクセスできるのは派生クラスで新しく宣言されたメンバーだけで、元のベースクラスメンバーはまだ存在します.
C++の上書きと非表示を区別する方法を拡張します.
オーバーライドの発生は、1ベースクラスメンバーの前にviirtualキーワードがある必要があります.
2関数名が同じ
3パラメータリストが同じ
非表示の場合は、次の2つに分けられます.
ケース1:1ベースクラスメンバーにvirtualキーワードがない
2派生クラスでは関数名が同じ(パラメータリストはどうでもいい)
ケース2:1ベースクラスメンバーにviirtualキーワードがある
2派生クラスの関数名は同じで、パラメータリストは同じに限らない
ポイント宣言:継承された関数が派生クラスでアクセス可能である限り、アクセス権限を考慮することなく上書きと非表示が発生します.たとえば、蓄積されたメンバー関数はprotectedであり、public継承によって派生クラスでpublicと同じ関数が定義され、上書きと非表示が発生します.
例:
三、java
JAvaと比較するとC++にはvirtualキーワードがないので虚関数はありません.したがって、上書きと非表示を区別する方法は、パラメータリストが異なるだけで、同じであれば上書き、異なるであれば非表示となる.またjavaのmain関数はクラスに書かれているので、次の例ではprotectedはpublicと変わらないように見えます.
補足:javaには単一の継承のみがあり、共通の継承のみがあります.JAvaでの付与は,実はC++でのポインタ間の付与に相当する.
Java/C++はいずれもオブジェクト向けの第3世代コンピュータの高度なプログラミング言語であり、その本質は同じであるが、文法には違いがあり、少し注意しないと混同されやすい.本文はいくつかのこの2つの言語の違いを総括して、参考に供します.
二、C++
C++という言語では、そのクラスにとってメンバーアクセスタイプにはpublic、protected、privateがあります.その継承方式についても共有継承、保護継承、私有継承に分けられる.また,C++には虚関数,純虚関数の区別があり,上書き,隠蔽の区別がある.比較的複雑です.
その多様性については、ベース・クラス・ポインタが派生クラスを指す場合、ベース・クラス・ポインタはベース・クラス内の既存のメンバーにのみアクセスでき、派生クラス固有のメンバーにはアクセスできません.派生クラスでベースクラスのメンバーを上書きしても、ベースクラスのメンバーをクラス派生クラスのメンバーに置き換えるだけで、このメンバーはベースクラスの所有であり、よく見られるいくつかのドリルスルーの問題では、派生クラスがベースクラスを上書きしたり、ベースクラスを隠したりすることが多いことを理解しています.上書きと非表示には大きな違いがあります.上書きは元のものではありません.非表示は派生クラスオブジェクトにとってアクセスできるのは派生クラスで新しく宣言されたメンバーだけで、元のベースクラスメンバーはまだ存在します.
C++の上書きと非表示を区別する方法を拡張します.
オーバーライドの発生は、1ベースクラスメンバーの前にviirtualキーワードがある必要があります.
2関数名が同じ
3パラメータリストが同じ
非表示の場合は、次の2つに分けられます.
ケース1:1ベースクラスメンバーにvirtualキーワードがない
2派生クラスでは関数名が同じ(パラメータリストはどうでもいい)
ケース2:1ベースクラスメンバーにviirtualキーワードがある
2派生クラスの関数名は同じで、パラメータリストは同じに限らない
ポイント宣言:継承された関数が派生クラスでアクセス可能である限り、アクセス権限を考慮することなく上書きと非表示が発生します.たとえば、蓄積されたメンバー関数はprotectedであり、public継承によって派生クラスでpublicと同じ関数が定義され、上書きと非表示が発生します.
例:
#include<iostream>
using namespace std;
class CPerson
{
protected:/*public*/
/*virtual*/ void display()
{
cout<<"CPerson"<<endl;
}
public:
void show()
{
display();
}
};
class CStudent:public CPerson
{
public:
void display()
{
cout<<"CStudent"<<endl;
}
};
int main()
{
CPerson *p=new CStudent();
//******************** ****************//
// public, virtual
p->display();// CPerson, , , (display())
p->show();// CPerson, , show CPerson display()
// public, virtual
p->display();// CStudent, , ,
p->display();// CStudent, , , CPerson
// protected, virtual ,
p->display();// , protected ,( )
p->show();// CPerson,show display(), , , , d //isplay() , CStudent
// pritected, virtual
p->display();// , protected ,( ), CPe //rson , protected
p->show(); // ,CStudent, 。
return 0;
}
三、java
JAvaと比較するとC++にはvirtualキーワードがないので虚関数はありません.したがって、上書きと非表示を区別する方法は、パラメータリストが異なるだけで、同じであれば上書き、異なるであれば非表示となる.またjavaのmain関数はクラスに書かれているので、次の例ではprotectedはpublicと変わらないように見えます.
補足:javaには単一の継承のみがあり、共通の継承のみがあります.JAvaでの付与は,実はC++でのポインタ間の付与に相当する.
import java.util.*;
public class test extends quiz
{
public static void main(String []args)
{
quiz p3=new test();
p3.display();// public protected, ,
//java virtual ,
// test;
}
public void add()
{
a++;
}
public/*protected*/ void display()
{
System.out.println("test");
}
}
class quiz
{
protected/*public*/ void display()
{
System.out.println("quiz");
}
}