C++总结----静态成员,const修饰类成员,内联函数超详解

网友投稿 715 2022-05-30

博客链接: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;

};

C++总结----静态成员,const修饰类成员,内联函数超详解

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<

本文转载自异步社区

C++

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:华为云智能边缘市场2.0上线:重新定义边缘计算的构建方式
下一篇:宁波东海集团入驻华为云市场,助力业务上云
相关文章