C ++クラスのプライベートメンバー

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()オブジェクトへの機能boxm_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

公開された468元の記事 ウォンの賞賛1751 ビュー104万+

おすすめ

転載: blog.csdn.net/chengyq116/article/details/104478716