设为首页 加入收藏

TOP

C++_静态成员(一)
2019-03-15 20:08:09 】 浏览:177
Tags:静态 成员

静态成员

引入目的:实现一个类的不同对象之间数据和函数共享

谁共享:本类所有对象。

  • 静态数据成员
    • 用关键字static声明
    • 该类的所有对象维护该成员的同一个拷贝
    • 必须在类外定义和初始化,用(::)来指明所属的类。
  • 静态成员函数
    • 类外代码可以使用类名和作用域操作符来调用公有静态成员函数。
    • 静态成员函数只能引用属于该类的静态数据成员或静态成员函数。访问非静态数据成员,必须通过参数传递方式得到对象名,通过对象名访问。

1. 静态数据成员

为何需要静态数据成员?

例 静态数据成员的引例
#include<iostream.h>
#include<string.h>
class Student {
public:
    Student(char *name1,char *stu_no1,float score1);
    ~Student();
    void show(); // 输出姓名、 学号和成绩
    void show_count_sum_ave(); // 输出学生人数
private:
    char *name; // 学生姓名
    char *stu_no; // 学生学号
    float score; // 学生成绩
    int count;
    float sum;
    float ave;
};
Student::Student(char *name1,char *stu_no1,float score1 )
{
    name=new char[strlen(name1)+1];
    strcpy(name,name1);
    stu_no=new char[strlen(stu_no1)+1];
    strcpy(stu_no,stu_no1);
    score=score1;
    ++count; // 累加学生人数
    sum=sum+score; // 累加总成绩
    ave=sum/count; // 计算平均成绩
}
Student::~Student()
{
    delete []name;
    delete []stu_no;
    --count;
    sum=sum-score;
}
void Student::show()
{
    cout<<"\n name: "<<name;
    cout<<"\n stu_no: "<<stu_no;
    cout<<"\n score: "<<score;
}
void Student::show_count_sum_ave()
{
    cout<<"\n count: "<<count;
    cout<<"\n sum: "<<sum;
    cout<<"\n ave: "<<ave;
}
void main()
{
    Student stu1("Liming","990201",90);
    stu1.show();
    stu1.show_count_sum_ave();
    Student stu2("Zhanghao","990202",85);
    stu2.show();
    stu2.show_count_sum_ave();
}

如何定义静态数据成员?

在一个类中,若将一个数据成员说明为static,这种成员称为静态数据成员。

静态数据成员特点?

  • 与一般的数据成员不同,无论建立多少个类的对象,都只有一个静态数据的拷贝。从而实现了同一个类的不同对象之间的数据共享
  • 它不因对象的建立而产生,也不因对象的析构而删除。它是类定义的一部分,所以使用静态数据成员不会破坏类的隐蔽性。
  • 在类的声明中只能声明静态数据成员的存在。由于类的声明是抽象的,静态数据成员的初始化需要在类的外部进行, 通过类名对它进行访问

静态数据成员初始化的格式

<数据类型><类名>∷<静态数据成员名>=<值>;

  • 初始化时不加该成员的访问权限控制符private,public等。
  • 初始化时使用作用域运算符来标明它所属的类,因此,静态数据成员是类的成员,而不是对象的成员。

引用静态数据成员时,采用如下格式:

<类名>∷<静态成员名>

  • 如果静态数据成员的访问权限允许的话(即public的成员),可在程序中,按上述格式来引用静态数据成员。
例3.15 静态数据成员的使用引例
#include<iostream.h>
#include<string.h>
class Student {
public:
    Student(char *name1,char *stu_no1,float score1);
    ~Student();
    void show(); // 输出姓名、 学号和成绩
    void show_count_sum_ave(); // 输出学生人数
private:
    char *name; // 学生姓名
    char *stu_no; // 学生学号
    float score; // 学生成绩
    static int count; // 静态数据成员,统计学生人数
    static float sum; // 静态数据成员,统计总成绩
    static float ave; // 静态数据成员,统计平均成绩
};
Student::Student(char *name1,char *stu_no1,float score1 )
{
    name=new char[strlen(name1)+1];
    strcpy(name,name1);
    stu_no=new char[strlen(stu_no1)+1];
    strcpy(stu_no,stu_no1);
    score=score1;
    ++count; // 累加学生人数
    sum=sum+score; // 累加总成绩
    ave=sum/count; // 计算平均成绩
}
Student::~Student()
{
    delete []name;
    delete []stu_no;
    --count;
    sum=sum-score;
}
void Student::show()
{
    cout<<"\n name: "<<name;
    cout<<"\n stu_no: "<<stu_no;
    cout<<"\n score: "<<score;
}
void Student::show_count_sum_ave()
{
    cout<<"\n count: "<<count; // 输出静态数据成员count
    cout<<"\n sum: "<<sum; // 输出静态数据成员sum
    cout<<"\n ave: "<<ave; // 输出静态数据成员ave
}
int Student::count=0; // 静态数员count初始化
float Student::sum=0.0;
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇个位数统计 下一篇loj#6033. 「雅礼集训 2017 Day2..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目