Home > Backend Development > C#.Net Tutorial > Static data members and static member functions of C++ classes

Static data members and static member functions of C++ classes

php是最好的语言
Release: 2018-08-06 16:16:40
Original
2953 people have browsed it

Static data members

·Declare with the keyword static

·When the data members of the declared class are static, no matter how many are created There is only one copy of static members for each class object

·Shared among all objects of the class, with static lifetime

·If there are no other initialization statements, the first one will be created after Object, all static data members are initialized to zero

·Defined and initialized outside the class, use the range resolution operator (::) to indicate the class to which it belongs

Example :

#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;
}
Copy after login

Static member function

Declaring the member function as static can separate the function from any specific object of the class

·It can also be called when the class object does not exist. Use the class name plus the range resolution operator :: to access it

·Static member functions can only access static Member data, other static member functions and other functions outside the class

·Static member functions have a class scope and cannot access the this pointer of the class. You can use static member functions to determine whether some objects of the class have been Create

·To use static member functions to access non-static members, you need to pass the object

Example:

#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;
}
Copy after login

Note:

The difference between static member functions and ordinary member functions:

Static member functions do not have this pointers and can only access static members (including static member variables and static Member function)

·Ordinary member functions have this pointer and can access any member in the class; while static member functions do not have this pointer

Use static members to understand the calling of constructors and destructors

#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;
}
Copy after login

Related articles:

C The use of static members and constant members

C Review Key Points Summary 5 Static Member Variables and Member Functions

The above is the detailed content of Static data members and static member functions of C++ classes. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
c
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template