C++初歩的なネーミング空間、クラス、クラスの静的方法、関数テンプレート、虚析構造関数
C++を勉強している間に、using namespace stdを使い始めました.
しかし、ネーミングスペースについてはよくわかりません.それからC#を勉强する时多く理解しました.
しかし、パッケージについては主にJavaにおけるJavaパッケージの理解で理解する.
私自身はテーマ上の概念に関する簡単なCPPプログラムを書いた.次のようになります.
まず、私はUbuntuの下でEclipseのLinuxtoolで開発したことを宣言します.
まずヘッダファイルですが、
そしてcppファイル
次はテストクラスです.
次のような問題があります.
なぜEclipseが生成するコードでは、解析関数を虚解析関数として定義するのか.
virtual ~Util();
仮想構造関数はvirtualを使用して説明され、フォーマットは次のとおりです.
virtual~<クラス名>();
虚析构関数の必要性
delete演算子は構造関数とともに動作し、deleteを使用してオブジェクトを削除すると、構造関数に対する呼び出しが隠される.これにより、ベースクラスタイプのポインタを用いる、異なるオブジェクトに対して適切な構造関数を呼び出して消去作業を行うことが保証される.
主にベースb=new Subclassのような削除のためです.
delete b;
このときbを削除する、ダミー構造関数でなければ派生クラスの構造関数は呼び出されない.
このSubclassでnewが割り当てたメモリは解放されませんでした.
静的メソッドについて:
スタティックメソッドはクラスメソッドとも呼ばれ、Javaから理解を深める.
一般的に関数定義の前にstaticキーを付ける.静的メンバー関数のフォーマットを次のように呼び出します.
<クラス名>:<静的メンバー関数名>(<パラメータテーブル>);
<クラス名>.<静的メンバー関数名>(<パラメータテーブル>);
静的メンバー関数の主な役割は、同類の静的メンバーにアクセスし、オブジェクト間で共有するデータを維持することである.
ここで起こりやすい問題は、静的関数においてインスタンスメンバーまたは関数にアクセスすることである.
しかし、静的メンバー関数にはthisポインタがないため、そのクラスの静的データメンバー、静的メンバー関数、およびクラス以外の関数およびデータに直接アクセスするしかなく、アクセスクラスの非静的データメンバーはパラメータ伝達によってオブジェクト名を得る、イメージ名によってアクセスしなければならない.
虚析构関数の作用例については私の别の文章を见ましょう.
しかし、ネーミングスペースについてはよくわかりません.それからC#を勉强する时多く理解しました.
しかし、パッケージについては主にJavaにおけるJavaパッケージの理解で理解する.
私自身はテーマ上の概念に関する簡単なCPPプログラムを書いた.次のようになります.
まず、私はUbuntuの下でEclipseのLinuxtoolで開発したことを宣言します.
まずヘッダファイルですが、
/*
* Util.h
*
* Created on: 2011-10-12
* Author: banxi1988
*/
#ifndef UTIL_H_
#define UTIL_H_
namespace banxi {
class Util {
public:
Util();
virtual ~Util();
template<typename T>
static T max(T a,T b){
return a > b?a:b;
}
};
}//end of namespace of banxi
#endif /* UTIL_H_ */
そしてcppファイル
/*
* Util.cpp
*
* Created on: 2011-10-12
* Author: banxi1988
*/
#include "Util.h"
namespace banxi {
Util::Util() {
// TODO Auto-generated constructor stub
}
Util::~Util() {
// TODO Auto-generated destructor stub
}
}
次はテストクラスです.
#include <iostream>
#include "Util.h"
using namespace banxi;
using namespace std;
int main() {
int a = 3,b = 4;
double c = 3.2,d = 4.3;
cout <<"compare"<<a<<","<<b<<"the max was:"<<Util::max(a,b)<< endl; // prints
cout <<"compare"<<c<<","<<d<<"the max was:"<<Util::max(c,d)<< endl; // prints
return 0;
}
/**
* :
*
* compare3,4the max was:4
* compare3.2,4.3the max was:4.3
*/
次のような問題があります.
なぜEclipseが生成するコードでは、解析関数を虚解析関数として定義するのか.
virtual ~Util();
仮想構造関数はvirtualを使用して説明され、フォーマットは次のとおりです.
virtual~<クラス名>();
虚析构関数の必要性
delete演算子は構造関数とともに動作し、deleteを使用してオブジェクトを削除すると、構造関数に対する呼び出しが隠される.これにより、ベースクラスタイプのポインタを用いる、異なるオブジェクトに対して適切な構造関数を呼び出して消去作業を行うことが保証される.
主にベースb=new Subclassのような削除のためです.
delete b;
このときbを削除する、ダミー構造関数でなければ派生クラスの構造関数は呼び出されない.
このSubclassでnewが割り当てたメモリは解放されませんでした.
静的メソッドについて:
スタティックメソッドはクラスメソッドとも呼ばれ、Javaから理解を深める.
一般的に関数定義の前にstaticキーを付ける.静的メンバー関数のフォーマットを次のように呼び出します.
<クラス名>:<静的メンバー関数名>(<パラメータテーブル>);
<クラス名>.<静的メンバー関数名>(<パラメータテーブル>);
静的メンバー関数の主な役割は、同類の静的メンバーにアクセスし、オブジェクト間で共有するデータを維持することである.
ここで起こりやすい問題は、静的関数においてインスタンスメンバーまたは関数にアクセスすることである.
しかし、静的メンバー関数にはthisポインタがないため、そのクラスの静的データメンバー、静的メンバー関数、およびクラス以外の関数およびデータに直接アクセスするしかなく、アクセスクラスの非静的データメンバーはパラメータ伝達によってオブジェクト名を得る、イメージ名によってアクセスしなければならない.
虚析构関数の作用例については私の别の文章を见ましょう.