• 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 第五版》

      

  • 相关阅读:
    基于分布式思想下的RPC解决方案--笔记
    前端对页面展示修改出现的问题------行内块元素(标签)、行内元素(标签)、块元素(标签)的区别
    POI读取带有图片(图片有的是合并单元格的)的商品列表Excel
    Springboot 默认加载文件(可直接访问、不可直接访问)是出现的问题
    for循环快还是递归快
    try catch finally 中遇到的return问题(经典)
    为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作
    数据结构Java实现03----单向链表的插入和删除
    匿名内部类详解(粗略)
    非法字符: 'ufeff' idea下的解决方案
  • 原文地址:https://www.cnblogs.com/iriczhao/p/13474975.html
Copyright © 2020-2023  润新知