C++总结----静态成员,const修饰类成员,内联函数超详解
博客链接:https://blog.csdn.net/qq_39412582/article/details/81215272 正文开始: ##一 · 静态成员 ## 我们知道全局变量能够实现数据共享,如果在多个程序文件中有多个函数,每一个函数中都可以来改变全局变量的值,但是这样做是不安全的,如不小心改错就会导致程序崩溃,因此在实际运用中很少用到全局变量。 但是有时候我们就是要用到多个对象之间实现数据共享,除了全局变量,就是我们今天要提到的静态成员。
1.1 静态数据成员
class Person
{
private:
char* _name;
static char* _gender; //把_gender定义为静态数据成员
int _age;
}
静态数据成员是一个特殊的数据成员,以static开头。如果希望个对象的数据成员的值是一样的,就可以把它定义为静态数据成员。声明为静态数据成员有个好处就是它只占用一分内存空间,而不是每个对象都为它留下一块空间。
对于静态成员函数作以下几点说明: ⑴前面说过,如果只申明类而未定义对象,则类的一般数据成员是不占空间的,只有在定义对象时,才会为对象的数据成员分配空间。但是静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间,它是在对象之外单独开辟空间,只要定义了静态成员变量,即使不定义对象,也会为其分配空间还能被引用。 ⑵静态数据成员既然不会随着对象的建立而分配空间,那么自然也不会随着对象的撤销而释放。静态数据成员是在程序开始运行时被分配空间,到程序结束时才会释放空间。 ⑶静态数据成员只能在类外进行初始化。
char* Person::_gender ="man"
要注意的是不能用参数初始化表来对静态数据成员初始化: {:--} ⑷静态数据成员既可以通过对象名引用还可以通过类名引用:
class Person
{
public:
Person(char* name, char* gender, int age)
:_name(name)
, _age(age)
{}
static char* _gender;
private:
char* _name;
int _age;
};
char* Person::_gender = "man";
int main()
{
Person p("Peter", "man", 18);
cout << Person::_gender << endl;
cout << p._gender << endl;
return 0;
}
{:--}
如果静态数据成员定义为私有的,就不能在类外直接引用,而必须通过公有函数进行引用。
class Person
{
public:
Person(char* name, char* gender, int age)
:_name(name)
{}
static char* _gender;
int PersonAge();
private:
char* _name;
static int _age;
};
char* Person::_gender = "man";
int Person::PersonAge()
{
return _age=18;
}
⑸与全局变量不同的是,静态数据成员的作用域只限于定义该类的作用域中,在类的作用域中可以通过类名和域运算符“::”来进行引用
2 静态成员函数 和静态数据成员一样,成员函数也可以是静态的,在类里声明的函数名前加上**“static”就成了静态成员函数,它是类的一部分而不是对象的一部分。如果在类为引用静态成员函数需要用类名和域运算符“::”**。如:
Person::PersonAge();
实际上也可以写成:
p.PersonAge();
但这并不能说这个函数是属于对象p的,而是只能说用了p的类型而已。 当调用一个对象的成员函数数时(非静态成员函数),系统会把该对象的起始地址赋给成员函数的this指针。而静态成员数不属于对象的成员函数,与任何对象无关,因此静态成员函数没有this指针。既然没有指向某一对象,就无法对一个对象里的非静态成员进行默认访问(即在引用数据成员时不指定对象名)----面试题。
静态成员函数可以直接引用本类中的静态成员,我们给个例子再来说明一下:
class Box
{
public:
Box(int length,int width,int height)
: _width(width)
, _height(height)
{}
static void volume(); //静态成员函数
private:
static int _length;
int _width;
int _height;
};
void Box::volume()
{
//cout<<_width<
本文转载自异步社区
原文链接:
https://www.epubit.com/articleDetails?id=N1825e49f-3229-4ad7-929a-ff011a7549be |
- 点赞
- 收藏
- 关注作者
评论(0)