C++类的一个重要成员:静态成员(二)——静态成员的定义

写在前面

  【目录】

  一、一个简单的程序示例

  二、静态成员的定义 基础

  三、静态成员的类内初始化

  四、程序示例的输出结果

 

  一、一个简单的程序示例:

 1 #include <iostream>
 2 
 3 class student
 4 {
 5 public :
 6     const static int grade = 100;    
 7     static int score;
 8     static int number;
 9     static void print_welcome();
10     int  phone;
11 
12 private :
13     int age = 999;
14     
15 };
16 
17 int student::score = 111;
18 int student::number = 222;
19 
20 void student::print_welcome()
21 {
22     std::cout<<"welcome welcome!!"<<std::endl;
23     std::cout<<"grade:"<<grade<<std::endl;
24     //std::cout<<"age:"<<student::age<<std::endl;
25     std::cout<<"score:"<<score<<std::endl;
26     std::cout<<"score:"<<student::score<<std::endl;
27     
28 }
29 
30 //main app
31 int main()
32 {
33     student stu;
34     
35     std::cout<<"classObject stu size:"<<sizeof stu<<std::endl;
36     
37     std::cout<<"class student grade:"<<student::grade<<std::endl;
38     std::cout<<"class student score:"<<student::score<<std::endl;
39     std::cout<<"class student number:"<<student::number<<std::endl;
40     std::cout<<"classObject stu phone:"<<stu.phone<<std::endl;
41     
42     student::print_welcome();
43 }

  一些思考:

  (1)上图第6行,如果去掉const,这份代码能编译通过吗?

  (2)对于上图的第10行代码,在程序40行输出该值,该值是多少呢?

  (3)上图25、26行代码,输出值一样吗?

  (4)上图如果取消24行的注释,这份代码能编译通过吗?

  (5)上图35行代码的输出值是多少呢?

 

  二、静态成员的定义 基础

  (1)对于静态成员函数:

    和其他成员函数一样,既可以在类的内部也可以在类的外部定义静态成员函数。(注意:当在类的外部定义静态成员时,不能重复static关键字,该关键字只能出现在类内部的声明语句中)。

    如何定义静态成员函数:

1 void student::print_welcome()
2 {
3     std::cout<<"welcome welcome!!";
4
}

  (2)对于静态数据成员:

    因为静态数据成员不属于类的任何一个对象,所以它们不是在创建类的对象时被定义。故静态数据成员不是由构造函数初始化的。(注意:一般来说,不能在类的内部初始化静态成员,必须在类的外部定义和初始化每个静态成员,一个静态数据成员只能被定义一次)。

    静态数据成员的生命周期:

    与全局变量类似,静态数据成员定义在任何函数之外。因此一旦被定义,将一直存在于程序的整个生命周期中。

    如何定义并初始化一个静态成员:

1 int student::score = 111;

 

  三、静态成员的类内初始化

  通常情况下,类的静态成员不应该在类的内部初始化。但是,可以为静态成员提供const整数类型的类内初始值,不过需要静态成员变量必须是字面值常量类型的constexpr。例如如下代码:

1 const static int grade = 100;

 

  四、程序示例输出结果

  

 

 

  关于本文:本文所有知识点来源于《C++ Primer 第五版》

  

posted on 2020-08-11 22:10  Iriczhao  阅读(749)  评论(0编辑  收藏  举报

导航

Live2D