JavaA2Z

KAB-studio > プログラミング > JavaA2Z > C++言語とは

C++言語

日本語 C++言語
英語 C plus plus language
ふりがな しーぷらすぷらすげんご、しーぷらぷらげんご
フリガナ シープラスプラスゲンゴ、シープラプラゲンゴ

解説

プログラミング言語のひとつ。
C言語に「クラス」等のオブジェクト指向的機能を加えた言語。
Javaの源流にあたる言語。「{」「}」といった記号、そして予約語の多くがJavaと共通となっているため、見た目は似ている言語。
JavaJVMのような「実環境」は持たず、言語仕様のみ決められている。
古い言語のため、低レベルの機能を持ち、特定のOS専用のアプリケーションを作成することができる。
 
C++言語はクラスを持つこともあり、Javaと似た言語である。
しかし、異なる点も非常に多い。
 
・C++言語のcharは1バイトだが、Javaでは2バイトである。
・C++言語のint未定義だが、Javaでは4バイトである。
・C++言語のlongは4バイトだが、Javaでは8バイトである。
・C++言語ではsignedとunsigned符号の有無を選択できるが、Javaではchar以外符号あり、char符号なしに固定されている。
・C++言語のTRUEとFALSEは整数値だが、Javaではtruefalseというbooleanリテラルとなる。C++言語のtruefalseと同様である。
・C++言語の、if等のステートメント評価は「0以外」か「0」の判定だが、Javaでは「true」か「false」である。
・C++言語にはグローバル変数があるが、Javaにはない。Javaではstaticフィールドで代替する。
・C++言語には関数があるが、Javaにはない。Javaではstaticメソッドで代替する。
・C++言語にはプリプロセッサがあるが、Javaにはない。機能によってはJavaでは代替不可能である。
・C++言語のgotoは、Javaでは機能しない。使用するとコンパイルエラーになる。
・C++言語の文字列配列を用いるが、JavaではStringクラスを用い、文字コードUnicodeに固定される。
・C++言語の文字列リテラルは先頭文字アドレスを返すが、JavaではStringクラスを自動生成しその中に格納する。
・C++言語の文字列リテラルには連結機能を持たないが、JavaStringクラスのみ+演算子等によって連結をうことができる。
・C++言語のポインタは、Javaでは参照に当たる。
・C++言語のアドレスは、Javaでは存在しない。Javaではアドレスを直接操作することはできない。代替として参照値があるが、C++言語のアドレスとは大きく異なる。少なくとも整数値ではない。
・C++言語のNULLは整数の0だが、Javaではリテラルであり、参照変数にのみ格納できる。
・C++言語ではポインタと配列はほぼ同じものだが、Java参照配列はまったく異なる。
・C++言語の配列は、Javaではインスタンスを作成する必要がある。
・C++言語の配列は先頭要素アドレスを返すが、Java配列インスタンス参照値を返す。
・C++言語の参照は、Javaには存在しない。
・C++言語ではクラスを通常の変数として宣言できるが、Javaでは参照変数しか宣言できず、インスタンスを作らなければならない。
・C++言語ではクラスをポインタや参照を通して使用したときのみポリモーフィズムされるが、Javaでは常に参照を用いるため常にポリモーフィズムわれる。
・C++言語では、メンバ関数にvirtualを付けなければオーバーライドしてもポリモーフィズムされないが、Javaでは常にオーバーライドしたメソッドポリモーフィズムの機能を持つ。
・C++言語の、classの前に置いたpublic等のアクセスコントロール予約語は、サブクラスメンバアクセスコントロールを指定するものだが、Javaではクラスそのもののアクセスコントロールうものであるため、まったく異なる機能となる。
・C++言語では各メンバアクセスコントロールは「アクセスコントロール予約語が書かれた箇所以下」を指定するが、Javaではフィールドメソッドひとつずつにアクセスコントロールを指定する。
・C++言語ではクラスデフォルトアクセスコントロールprivateだが、Javaでは「無印」という特別なアクセスコントロールである。
・C++言語のprotectedは「サブクラスのみ」だが、Javaでは「パッケージ+サブクラス」である。
・C++言語ではクラス定義の最後にセミコロン(「;」)が必要だが、Javaでは必要ない。
・C++言語では演算子オーバーロードできるが、Javaではできない。通常のメソッドを用いる必要がある。
・C++言語のconstメンバ関数は、Javaにはない。
・C++言語には、削除されるときに呼び出される「デストラクタ」というメンバ関数があるが、Javaにはない。Javaクラスガベージコレクションによって削除されるため、デストラクタがあったとしてもいつ呼び出されるか分からないためである。
・C++言語のconstポインタは、Javaにはない。正確には「char *const」のようなconstfinalで代用できるが、「const char *」のconstJavaにはない。
・C++言語では通常のキャストもしくはstatic_castで好きなキャストえたが、Javaでは好きにはえない。クラス継承関係が一致していない場合や、参照値を整数値に、といった無理なキャストえない。
・C++言語ではnewで作成したインスタンスはdeleteで削除する必要があるが、Javaではガベージコレクションによって自動的に削除される。
・C++言語では通常の変数配列とでnew及びdeleteの使用方法が異なるが、Javaでは同じである。
・C++言語では基本プリミティブ型)もnewインスタンスを作成できるが、Javaではクラス配列のみで、プリミティブ型インスタンスは作成できない。
・C++言語にも例外処理があるが、Javaに比べて機能は極端に劣る。
・C++言語の名前空間は、Javaパッケージに当たる。
・C++言語はヘッダーファイル.h)とソースファイル.cpp)の2つのファイルプログラムを記述するが、Javaではソースファイル.java)のみである。
・C++言語ではクラス定義メンバ関数宣言ヘッダーファイルい、メンバ関数実装ソースファイルうが、Javaでは全てソースファイルのみでう。これはC++言語のインライン関数を用いた記法に似たものである。
・C++言語のincludeは単に「ヘッダーファイルを指定した箇所に置き換える」ことだが、Javaimportは指定したクラスパッケージの指定なしに使用するためのものであり、似ているが根本的に異なるものである。
・C++言語の標準ライブラリは「Cランタイムライブラリ」のみであり、これすらも言語仕様とは独立しているが、Javaの標準ライブラリJ2SEは多機能であり、言語仕様と深く融合している。
 
ざっと上げただけでもこれだけ異なる。
C++言語はJavaに似ているが、そもそもC++言語はC言語の機能拡張版であり、プログラムの多くは古いC言語のスタイルに則ったものが多い。
もし、C++言語のプログラムJavaプログラムリプレースする場合には、単に置き換えず、両方の言語を熟知している人間が再設計することが望ましい。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// 一般的なC++言語のプログラム。

// Data.h

// 二重読み込み防止用のプリプロセッサマクロ。
#if !defined(__Data_h__)
#define __Data_h__

// 同じく二重読み込み防止用のプリプロセッサマクロ。
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

// CDataクラスの定義。
class CData  
{
private:
    // アクセスコントロール「private」。
    // ここから、次のアクセスコントロールまでのメンバは
    // privateになります。

    // メンバ変数。
    int m_iValue;

public:
    // アクセスコントロール「public」。
    // ここから、次のアクセスコントロールまでのメンバは
    // publicになります。

    // コンストラクタの宣言。
    CData();
    // デストラクタの宣言。
    virtual ~CData();

    // getterメソッドの宣言。
    int GetValue();

    // setterメソッドの宣言。
    void SetValue( int p_i );
};

#endif // !defined(__Data_h__)


// Data.cpp
#include <stdio.h>

#include "Data.h"

// コンストラクタ。
CData::CData()
{
    printf( "コンストラクタが呼ばれました。\n" );
}

// デストラクタ。
CData::~CData()
{
    printf( "デストラクタが呼ばれました。\n" );
}

// getter。
int CData::GetValue()
{
    return m_iValue;
}

// setter。
void CData::SetValue( int p_i )
{
    m_iValue = p_i;
}


// Main.cpp
#include <stdio.h>

#include "Data.h"

// この関数が最初に呼ばれます。
int main(int argc, char* argv[])
{
    // CDataクラスの変数を宣言します。
    // newは必要ありません。
    CData cData;
    // コンストラクタが呼ばれました。

    // setter/getterを使用します。
    cData.SetValue( 100 );
    printf( "%d\n", cData.GetValue() );
    // 100

    return 0;
    // デストラクタが呼ばれました。
}
// 一般的なC++言語のプログラム。

// Data.h

// 二重読み込み防止用のプリプロセッサマクロ。
#if !defined(__Data_h__)
#define __Data_h__

// 同じく二重読み込み防止用のプリプロセッサマクロ。
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

// CDataクラスの定義。
class CData  
{
private:
    // アクセスコントロール「private」。
    // ここから、次のアクセスコントロールまでのメンバは
    // privateになります。

    // メンバ変数。
    int m_iValue;

public:
    // アクセスコントロール「public」。
    // ここから、次のアクセスコントロールまでのメンバは
    // publicになります。

    // コンストラクタの宣言。
    CData();
    // デストラクタの宣言。
    virtual ~CData();

    // getterメソッドの宣言。
    int GetValue();

    // setterメソッドの宣言。
    void SetValue( int p_i );
};

#endif // !defined(__Data_h__)


// Data.cpp
#include <stdio.h>

#include "Data.h"

// コンストラクタ。
CData::CData()
{
    printf( "コンストラクタが呼ばれました。\n" );
}

// デストラクタ。
CData::~CData()
{
    printf( "デストラクタが呼ばれました。\n" );
}

// getter。
int CData::GetValue()
{
    return m_iValue;
}

// setter。
void CData::SetValue( int p_i )
{
    m_iValue = p_i;
}


// Main.cpp
#include <stdio.h>

#include "Data.h"

// この関数が最初に呼ばれます。
int main(int argc, char* argv[])
{
    // CDataクラスの変数を宣言します。
    // newは必要ありません。
    CData cData;
    // コンストラクタが呼ばれました。

    // setter/getterを使用します。
    cData.SetValue( 100 );
    printf( "%d\n", cData.GetValue() );
    // 100

    return 0;
    // デストラクタが呼ばれました。
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/10/22
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。