C++ の静的メンバーと非静的メンバー


メンバー変数とメンバー関数

1 カテゴリー

メンバー変数とメンバー関数は、静的メンバーと非静的メンバーに分類されます。

違いと識別:

  • Static キーワードで変更されたものは静的メンバーです。
  • Static キーワードを変更しないと、非静的メンバーになります。

2つの違い

2.1 静的キーワード変更の有無

  • Static キーワードで変更されたものは静的メンバーです。
  • Static キーワードを変更しないと、非静的メンバーになります。

2.2 異なるメモリ割り当て時間

  • 静的メンバーはメモリ内に存在し、非静的メンバーはメモリを割り当てる前にインスタンス化する必要があります。

2.3 さまざまなアクセス方法または呼び出し方法

  • 静的メンバー。クラス名 + 静的メンバー名を使用して、この静的メンバーに直接アクセスできます。
  • 静的メンバーはメモリ内に存在し、メモリを割り当てる前に非静的メンバーをインスタンス化する必要があるため、静的メンバーは非静的メンバーにアクセスできません。
  • 非静的メンバーはクラスの静的メンバーに直接アクセスできます

静的メンバー: 静的クラスのメンバーは、静的修飾子を追加して静的メンバーになります。静的メンバーはメモリ内に存在し、非静的メンバーは事前にインスタンス化する必要があるため、クラス名 + 静的メンバー名を使用してこの静的メンバーに直接アクセスできます。メモリが割り当てられているため、静的メンバーは非静的メンバーにアクセスできません...静的メンバーはメモリ内に存在するため、非静的メンバーはクラス内の静的メンバーに直接アクセスできます静的メンバーのコピーは各クラスに 1 つだけあります。同じクラスの異なるオブジェクトに対する解決策の例。 間でのデータと関数の共有の問題。

非静的メンバー: 静的ではないすべてのメンバーは非静的メンバーです。クラスがインスタンス化されると、インスタンス化されたクラス名を介してアクセスできます。非静的メンバーの有効期間は、クラスの有効期間によって決まります。 ... そして静的メンバー 静的メンバーは常にコンテンツ内に存在するため、有効期間の概念はありません...

クラスには静的メンバーと非静的メンバーを含めることもでき、クラスには静的コンストラクターと非静的コンストラクターを含めることもできます。

静的メンバー関数は、クラスの静的データ メンバーおよび静的メンバー関数を直接参照できますが、非静的データ メンバーおよび非静的メンバー関数を直接参照することはできません。参照しないと、コンパイル エラーが報告されます。参照したい場合は、パラメーターの受け渡しを通じてオブジェクト名を取得し、オブジェクト名を通じてそれを参照する必要があります。

3つの例

class A
{
    
    
      publicstatic void f(A a);
     private:
          int x;
}void A::f(A a)
{
    
    
      cout<<x<<endl;//对x的引用是错误的
     cout<<a.x<<endl;//正确的
}
#include<iostream>
using namespace std;
 
class Myclass
{
    
    
	private:
		int		m;	// 非静态数据成员
		static	int	n;	// 静态数据成员
	public:
		Myclass();	// 构造函数
		static	int	getn(Myclass a);	// 静态成员函数
};
 
Myclass::Myclass()
{
    
    
	m = 10;
}
 
int	Myclass::getn(Myclass a)
{
    
    
	cout << a.m << endl;	// 通过类间接使用  非静态数据成员
	return n;		// 直接使用  静态数据成员
}
 
int	Myclass::n = 100;	// 静态数据成员初始化
 
void	main()
{
    
    
	Myclass app1;
	cout << app1.getn(app1) << endl;	// 利用对象引用静态函数成员
	cout << Myclass::getn(app1) << endl;	// 利用类名引用静态函数成员
}

次に、静的メンバーと非静的メンバーの違いは次のように結論付けることができます。

1. アクセス方法が異なる 静的メンバー(クラス名.静的メンバー名でアクセス) 非静的メンバー(オブジェクト名.非静的メンバー名でアクセス)

2. 静的メンバーはクラスに属しており、クラスのすべてのオブジェクトがこのメンバーを共有します。

非静的メンバーはオブジェクトに属し、各オブジェクトにはコピーがあります。静的メンバーは、クラス内のオブジェクトの数に関係なく、メモリ内にスペースを割り当てるだけです。

おすすめ

転載: blog.csdn.net/qq_42817360/article/details/133307694