首页 > 编程知识 正文

c语言函数static,修饰类的访问控制符有哪些

时间:2023-05-05 09:07:46 阅读:119094 作者:3797

c静态修饰符概述静态数据成员引用静态数据成员类名访问数据成员的静态成员函数集成方案

概要

静态(静态)修饰符用于控制变量的存储方式和可见性。 静态局部变量存储在静态区域:中

静态性质:

本地特性:的作用范围仅限于本函数的静态特性3360存储在静态区域中的情况,在函数调用结束后不孝顺地保留原始值。 在下一次呼叫时,保持上次呼叫结束时的值。 静态数据成员在定义全局变量时发现问题3360

我们可以在程序各处自由变更全局变量的值(不安全)。

静态数据成员特征:

静态数据成员由所有对象共享,在所有对象之外单独打开空间,静态数据成员占用的空间并不是随着对一个对象的撤销而释放静态数据成员,而是在多个同类对象之间释放数据

引用静态数据成员Student类:

# ifndef project1_ student _ h # define project1_ student _ h # includestringusingnamespacestd; class student { private 3360静态int count; //用于定义静态数据成员int num的字符串名称; char gender; 公共: student (; sudent(intnum、string name、char gender ); ~Student (; int getCount () {返回计数; } void显示(; (; # endif///project1_ student _ hstudent.CPP :

# include ' student.h ' # includeiostreamusingnamespacestd; //类外初始化静态数据成员int Student:count=0; //无参结构student :3360 student (: num (-1 )、name(p ) ' none )、gender(g ) ' n ) { } student 3360: student } int cout 'name: ' name endl; cout 'gender: ' gender endl; cout '=======================' endl; }Student:~Student () count----; } main:

# include ' student.h ' # includeiostreamusingnamespacestd; int main () studentstudent1(1,' Little white ',' f ' ); cout student1.getCount () endl; sudent*pt=newstudent(1,' Little white ',' f '; cout pt - getCount () endl; cout student1.getCount () endl; 发布delete pt的cout student1.getCount () endl; 返回0; 输出结果:

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

静态数据成员是属于类的所有对象,而不是对象。 但是,可以在类的对象中引用。 如果静态数据成员定义为私有,则不能在类外直接引用。 在公共成员函数中引用静态数据成员,以实现对象之间的数据共享,同时避免使用全局变量破坏封装原则,以类名访问数据成员的Student类:

# ifndef project1_ student _ h # define project1_ student _ h # includestringusingnamespacestd; class student { private : int num; 字符串名称; char gender; 公共:静态输入计数; //定义静态数据成员Student (的sudent(intnum,string name,char gender ) ); ~Student (; int getCount () {返回计数; } void显示(; (; #endif //P

ROJECT1_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;}

输出结果:

010

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

静态成员函数

成员函数也可以定义为静态的, 我们只需要在类声明函数的前面加上 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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。