gpt4 book ai didi

C++中static修饰符的详解及其作用介绍

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 33 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章C++中static修饰符的详解及其作用介绍由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

概述

static (静态) 修饰符是用来控制变量的存储方式和可见性的. 静态局部变量存储在静态区域

C++中static修饰符的详解及其作用介绍

static 的性质

  • 局部特性:作用范围仅限于本函数
  • 静态特性:存储在静态区, 函数调用结束后不孝顺而保留原值. 在下一次调用时, 保留上一次调用结束时的值.

  。

静态数据成员

在我们定义全局变量的时候, 我们会发现一个问题: 我们可以在程序各处自由的修改全局变量的值 (不安全). 。

静态数据成员的特点

  1. 静态数据成员被所有对象共享, 在所有对象之外单独开辟空间存储
  2. 静态数据成员所占空间并不随某个对象的撤销而释放
  3. 静态数据成员可以在同类的多个对象之间实现数据共享

C++中static修饰符的详解及其作用介绍

  。

引用静态数据成员

Student 类

#ifndef PROJECT1_STUDENT_H#define PROJECT1_STUDENT_H#include <string>using namespace std;class Student {private:  static int count;  // 定义静态数据成员  int num;  string name;  char gender;public:  Student();  Student(int num, string name, char gender);  ~Student();  int getCount() {return count;}  void display();};#endif //PROJECT1_STUDENT_H

Student.cpp

#include "Student.h"#include <iostream>using namespace std;// 类外初始化静态数据成员int Student::count = 0;// 无参构造Student::Student() : num(-1), name("None"), gender('N') {}Student::Student(int n, string p, char g) : num(n), name(p), gender(g) {  count ++;}void Student::display() {  cout << "num: " << num << endl;  cout << "name: " << name << endl;  cout << "gender: " << gender << endl;  cout << "===============" << endl;}Student::~Student() {  count --;}

main

#include "Student.h"#include <iostream>using namespace std;int main() {  Student student1(1, "Little white", 'f');  cout << student1.getCount() << endl;  Student *pt = new Student(1, "Little white", 'f');  cout << pt -> getCount() << endl;  cout << student1.getCount() << endl;  // 释放  delete pt;  cout << student1.getCount() << endl;  return 0;}

输出结果

1 2 2 1 。

静态数据成员是 “大家” 的

  • 静态数据成员不属于某对象, 而是属于类的所有对象. 不过, 用类的对象可以引用它
  • 如果静态数据成员被定义为私有的, 则不能在类外直接引用, 而必须通过公用的成员函数引用
  • 静态数据成员实现了各对象之间的数据共享, 同时避免了使用全局变量破坏了封装的原则

  。

用类名访问数据成员

Student 类

#ifndef PROJECT1_STUDENT_H#define PROJECT1_STUDENT_H#include <string>using namespace std;class Student {private:  int num;  string name;  char gender;public:  static int count;  // 定义静态数据成员  Student();  Student(int num, string name, char gender);  ~Student();  int getCount() {return count;}  void display();};#endif //PROJECT1_STUDENT_H

Student.cpp

#include "Student.h"#include <iostream>using namespace std;// 类外初始化静态数据成员int Student::count = 0;// 无参构造Student::Student() : num(-1), name("None"), gender('N') {}Student::Student(int n, string p, char g) : num(n), name(p), gender(g) {  count ++;}void Student::display() {  cout << "num: " << num << endl;  cout << "name: " << name << endl;  cout << "gender: " << gender << endl;  cout << "===============" << endl;}Student::~Student() {  count --;}

main

int main() {    cout << Student::count << endl;  Student *pt = new Student(1, "Little white", 'f');  cout << pt -> getCount() << endl;  // 释放  delete pt;  cout << Student::count << endl;  return 0;}

输出结果

0 1 0 。

静态数据成员既可以通过对象名引用, 也可以通过类名来引用. 在作用域内, 通过类名和运算符 “::” 引用静态数据成员时, 不用考虑该类知否有对象存在. 。

  。

静态成员函数

成员函数也可以定义为静态的, 我们只需要在类声明函数的前面加上 static 关键字. 如

#ifndef PROJECT1_STUDENT_H#define PROJECT1_STUDENT_H#include <string>using namespace std;class Student {private:  int num;  string name;  char gender;public:  static int count;  // 定义静态数据成员  Student();  Student(int num, string name, char gender);  ~Student();  static int getCount() {return count;}  // 定义静态成员函数  void display();};#endif //PROJECT1_STUDENT_H

静态成员函数的作用就是为了能处理静态数据成员, 即不需要 this 指针访问的成员. 。

重点

  • 静态成员的本质特征是类中所有对象的 “公共元素”
  • 静态成员的语法特征是通过类名和域运算符 “::” 引用, 而不只是通过对象引用

  。

综合案例

Student 类

#ifndef PROJECT1_STUDENT_H#define PROJECT1_STUDENT_H#include <string>using namespace std;class Student {private:  int num;  string name;  char gender;  int score;public:  static int count;  // 定义静态数据成员  static int sum;  // 定义静态数据成员  Student();  Student(int num, string name, char gender, int score);  ~Student();  static double average() {return (sum / count);}  static int getCount() {return count;}  void display();};#endif //PROJECT1_STUDENT_H

Student.cpp

#include "Student.h"#include <iostream>using namespace std;// 类外初始化静态数据成员int Student::count = 0;int Student::sum = 0;// 无参构造Student::Student() : num(-1), name("None"), gender('N'), score(-1) {}Student::Student(int n, string p, char g, int s) : num(n), name(p), gender(g), score(s) {  count ++;  sum += s;}void Student::display() {  cout << "num: " << num << endl;  cout << "name: " << name << endl;  cout << "gender: " << gender << endl;  cout << "===============" << endl;}Student::~Student() {  count --;}

main

#include "Student.h"#include <iostream>using namespace std;int main() {  // 创建student数组  Student student_array[3] = {          Student(1, "Little white", 'f', 68),          Student(2, "Small white", 'f', 78),          Student(3, "Big white", 'f', 88)  };  // 调试输出平均分  cout << "三个学生的平均分是: " << Student::average() << endl;  return 0;}

输出结果

三个学生的平均分是: 78 。

到此这篇关于C++中static修饰符的详解及其作用介绍的文章就介绍到这了,更多相关C++ static内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://blog.csdn.net/weixin_46274168/article/details/116431766 。

最后此篇关于C++中static修饰符的详解及其作用介绍的文章就讲到这里了,如果你想了解更多关于C++中static修饰符的详解及其作用介绍的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com