Maison > développement back-end > Tutoriel C#.Net > Données membres statiques et fonctions membres statiques des classes C++

Données membres statiques et fonctions membres statiques des classes C++

php是最好的语言
Libérer: 2018-08-06 16:16:40
original
2953 Les gens l'ont consulté

Données membres statiques

·Déclarez avec le mot-clé static

·Lorsque les données membres de la classe déclarée sont statiques, peu importe combien sont créés Pour les objets d'une classe, il n'y a qu'une seule copie des membres statiques

·Partagée entre tous les objets de la classe, avec une durée de vie statique

·S'il n'y a pas d'autres instructions d'initialisation , le premier sera créé après Object, toutes les données statiques membres sont initialisées à zéro

·Défini et initialisé en dehors de la classe, utilisez l'opérateur de résolution de plage (::) pour indiquer la classe à laquelle il appartient

Exemple :

#include <iostream>
using namespace std;

class Box {
public:
	static int count;    //若该静态数据成员在private部分声明,则只能通过静态成员函数处理
	Box(double l = 2.0, double b = 2.0, double h = 2.0) {
		cout << "One constructor was called." << endl;
		length = l, width = b, height = h;
		count++;	//每创建一个对象时加1
	}
	double Volume() {
		return length * width * height;
	}
	~Box() { count--; }
private:
	double length, width, height;
};
//初始化类Box的静态成员
int Box::count = 0;

int main(void) {
	Box Box1(3.3, 1.2, 1.5);
	Box Box2(8.5, 6.0, 2.0);
	cout << "Total objects: " << Box::count << endl;	//输出对象的总数
	return 0;
}
Copier après la connexion

Fonction membre statique

Déclarer la fonction membre comme statique peut séparer la fonction de tout objet spécifique de la classe

·Peut également être appelé lorsque l'objet de classe n'existe pas. Utilisez le nom de la classe plus l'opérateur de résolution de plage :: pour accéder à

·Membre statique. les fonctions ne peuvent accéder qu'aux données des membres statiques, aux autres fonctions membres statiques et aux autres fonctions en dehors de la classe

·Les fonctions membres statiques ont une portée de classe et ne peuvent pas accéder au pointeur this de la classe. Vous pouvez utiliser les fonctions membres statiques pour déterminer. si certains objets de la classe ont été créés

·Pour accéder aux membres non statiques à l'aide de fonctions membres statiques, vous devez transmettre l'objet

Exemple :

#include <iostream>
using namespace std;

class Box {
public:
	static int count;
	Box(double l = 2.0, double b = 2.0, double h = 2.0) {
		cout <<"One constructor was called." << endl;
		length = l, width = b, height = h;
		count++;
	}
	double Volume() {
		return length * width * height;
	}
	static int getCount() {	//静态成员函数 
		return count;
	}
private:
	double length, width, height;
};
int Box::count = 0;

int main(void) {
	//在创建对象之前输出对象的总数
	cout << "Inital Stage Count: " << Box::getCount() << endl;
	
	Box Box1(3.3, 1.2, 1.5);
	Box Box2(8.5, 6.0, 2.0);
	
	//在创建对象之后输出对象的总数
	cout << "Final Stage Count: " << Box::getCount() << endl;
	return 0;
}
Copier après la connexion

Remarque :

La différence entre les fonctions membres statiques et les fonctions membres ordinaires :

·Membre statique les fonctions n'ont pas ce pointeur et ne peuvent accéder qu'aux membres statiques (y compris les variables membres statiques et les fonctions membres statiques)

·Les fonctions membres ordinaires ont ce pointeur et peuvent accéder à n'importe quel membre de la classe ; tandis que les fonctions membres statiques n'ont pas ce pointeur

Utilisez les membres statiques pour comprendre l'appel des constructeurs et des destructeurs

#include <iostream>
using namespace std;

class A {
	friend class B;	//类B是类A的友元 
public:
	static int value;
	static int num;
	A(int x, int y) {
		xp = x, yp = y;
		value++;
		cout << "调用构造:" << value << endl;
	}
	void displayA() {
		cout << xp << "," << yp << endl;
	}
	~A() {
		num++;
		cout << "调用析构:" << num << endl;
	}
private:
	int xp, yp;
};
class B {
public:
	B(int x1, int x2) : mpt1(x1 + 2, x2 - 2), mpt2(x1, x2) {
		cout << "调用构造\n";	//mpt是类A的对象,有几个mpt,有关类A的操作便执行几次 
	}
	void set(int m, int n);
	void displayB();
	~B() {
		cout << "调用析构\n";	//析构函数在类结束前调用,类结束的时候释放类申请的空间
	} 
private:
	A mpt1, mpt2;		//将A类的对象声明为B类的私有数据成员 
};

int A::value = 0;
int A::num = 0;
void B::set(int m, int n) {
	mpt1.xp = m * 2, mpt1.yp = n / 2;
}
void B::displayB() {
	mpt1.displayA();
}

int main() {
	B p(10, 20);
	cout << "Hello world!" << endl;
	B displayB();    //通过友元,使类B输出类A的私有数据成员
	return 0;
}
Copier après la connexion

Articles connexes :

L'utilisation de membres statiques et de membres constants C++

Résumé des points clés de l'examen C++ Cinq variables de membre statique et fonctions membres

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
c
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal