C ++クラスのプライベートメンバー
1.クラスのプライベートメンバー
クラスオブジェクトのデータメンバのコンストラクタは、割り当てられているが、それでも、プログラムのどの部分が、本質的にオブジェクトに所属するメンバーを混同できるように、それはおそらく少し矛盾しています。地元の配管工や石工が手放す、私たちの体の後に外科医のナイフの優れたレベルを配置した場合、これはほとんど充当されません。私たちは、クラスのデータメンバを保護するための対策を取る必要があります。
クラスメンバを定義するときに、キーワードを使用してprivate
、あなたが必要なセキュリティを得ることができます。一般的に、プライベートクラスメンバーは、クラスのメンバ関数にアクセスすることができます。もちろん、そこに例外はあるが、我々は、後でそれを考慮します。一般的な機能にプライベートクラスメンバーにアクセスするための直接的な方法はありません。
プライベートクラスメンバーは、クラスの内部インターフェイスを指定し、別々に実装します。インタフェースは、クラスから構成public
メンバー及びpublic
必要に応じて、メンバ関数組成物、public
機能部材を提供することを含むことができるprivate
のメンバーを含む、すべてのクラスのメンバーへの間接的なアクセスを。例えば、内部メンバーとして指定されたクラスはprivate
、それらが性能を改善するために修飾されたが、クラス公開インタフェースで使用されるコードを変更することなくすることができます。不要な介入からそれを作るためにデータメンバとクラスのメンバ関数のセキュリティを確保するために、これらのメンバーを公開する必要はありませんと宣言private
良い習慣も。使用するためには、必要に応じてクラス宣言のメンバーのみpublic
。
//============================================================================
// Name : std::class
// Author : Yongqiang Cheng
// Version : Version 1.0.0
// Copyright : Copyright (c) 2019 Yongqiang Cheng
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
using std::cout;
using std::endl;
class CBox // Class definition at global scope
{
public:
// Constructor definition using an initialization list
explicit CBox(double lv = 1.0, double wv = 1.0, double hv = 1.0) : m_Length { lv }, m_Width { wv }, m_Height { hv }
{
cout << "Constructor called." << endl;
}
// Function to calculate the volume of a box
double volume()
{
return m_Length * m_Width * m_Height;
}
private:
double m_Length; // Length of a box in inches
double m_Width; // Width of a box in inches
double m_Height; // Height of a box in inches
};
int main()
{
CBox match { 2.2, 1.1, 0.5 }; // Declare match box
CBox box2; // Declare box2 - no initial values
cout << "Volume of match = " << match.volume() << endl;
// Uncomment the following line to get an error
// box2.m_Length = 4.0;
cout << "Volume of box2 = " << box2.volume() << endl;
return 0;
}
Constructor called.
Constructor called.
Volume of match = 1.21
Volume of box2 = 1
2例示します
今、CBox
コンストラクタを宣言explicit
ので、我々は暗黙の型変換を避けるために期待しないでください。CBox
今、2つのクラス定義のセクションが含まれています。コンストラクタ関数を含む前面部材volume()
のpublic
部分は、を含むデータメンバに続くprivate
部分を。さて、3人のデータの会員になると、このクラスのメンバ関数によってアクセスすることができます。任意のメンバ関数を変更することなく、どのような場合には、それらはクラスのすべてのデータメンバにアクセスすることができます。ただし、main()
オブジェクトへの機能box
のm_Length
割り当てステートメントのメンバーは、もはやコメントフォームで、コンパイラはデータメンバにアクセスできないことを示すエラーメッセージが表示されません。まだ行っていない場合は、次のことができClass View
、タブの上に見えるCBox
クラスのメンバー。各メンバーの隣にあるアイコンメンバーのアクセシビリティのことを指摘しました。メンバーがプライベートであれば、それは小さな南京錠のアイコンが表示されます。
覚えておくべきポイントがあるということになりましたコンストラクタまたはメンバ関数を使用する唯一の方法は、割り当てられたオブジェクトのデータメンバにプライベートです。あなたは、設定またはクラスのプライベートデータメンバーを変更するために使用されるすべてのメソッドは、メンバ関数によって提供されていることを確認する必要があります。
この関数は、クラスに出してもよいprivate
部分を。この場合、彼らは同様の機能の他のメンバーから呼び出すことができます。機能した場合volume()
にprivate
一部あるため、コンパイラは、エラーメッセージを与えるmain()
文の機能は、この機能を使用しようとします。コンストラクタた場合private
の部分、それはそのクラスの任意のオブジェクトを宣言しません。
データメンバが持っているように定義することはprivate
、次のアクセス特性を、CBox
クラスがまだ動作することができます。主な違いは、不正なアクセスや変更から、これらのメンバーは今、完全に保護されていることです。
特に指定がない限り、デフォルトのアクセスクラスのプロパティは、メンバーですprivate
。したがって、我々は、クラス定義の先頭にすべてのプライベートメンバー、およびキーを省略することによってできるprivate
ので、それらはデフォルト持っprivate
アクセスプロパティを。しかし、明示的に指定されたアクセス機能が優れているどのような場合には、その私たちの目的でない任意の疑いがあります。
もちろん、あなたはすべてのデータがメンバーになってきたする必要はありませんprivate
。クラスに従って使用は、一部のデータがメンバーとして定義することができるprivate
、などのように定義されpublic
、それが我々の目的に完全に依存します。クラスのないメンバーとして指定されていない場合はpublic
その理由、それがためにそれらを割り当てることが最善であるprivate
、これはクラスをより安全にすることができます。任意の通常の関数は、クラスにアクセスすることはできませんprivate
メンバー。
Standard Template Library,STL:标准模板库
リファレンス
アイバーホートンの始まりのVisual C ++ 2013
http://www.wrox.com/WileyCDA/WroxTitle/productCd-1118845714.html