zoukankan      html  css  js  c++  java
  • C++ static 静态成员总结

    1:不能通过类名来调用类的非静态成员函数。

    错误示范:

    class Member
    {
    public:    
        void init()
        {  
        }
        static void output()
        {
        }
    };
    int main()
    {
        Member::init();//✖
        Member::output();//✔
    }

    2:类的对象可以使用静态成员函数和非静态成员函数。

    1 int main()
    2 {
    3     Member m;
    4     m.init();//✔
    5     m.output();//✔
    6 }

    3:静态成员函数中不能引用非静态成员。

     1 class Member
     2 {
     3 public:    
     4     void init()
     5     {  
     6     }
     7     static void output()
     8     {
     9         cout << x;//✖
    10     }
    11 private:
    12     int x;
    13 };
    14 int main()
    15 {
    16     Member m;
    17     m.output();
    18 }

    4:类的非静态成员函数可以调用用静态成员函数,但反之不能。

     1 class Member
     2 {
     3 public:    
     4     void init()
     5     {  
     6         output();//
     7     }
     8     static void output()
     9     {
    10     }
    11 };
    12 int main()
    13 {
    14     Member m;
    15     m.output();
    16 }

    5:类的静态成员变量必须先初始化再使用。

    如:

     1 #include<iostream>
     2 using namespace std;
     3 
     4 class Height{
     5 private:
     6     static int number;
     7 public:
     8     Height(){
     9         number++;
    10     }
    11     ~Height(){
    12         number--;
    13         cout << number <<endl;
    14     }
    15     static void output(){
    16         cout << number <<endl;
    17     }
    18 };
    19 int Height::number = 0;//类的静态成员变量必须先初始化再使用,不必再加static关键字
    20 int main()
    21 {
    22     Height p;
    23     p.output();
    24     return 0;
    25 }

    补充:典新23为什么静态成员变量要通过类外初始化赋值?_百度知道 (baidu.com)

    ----------------------

    当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关。
    静态数据成员的用途之一是统计有多少个对象实际存在。
    静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的。也不能在够造函数中初始化该成员,因为静态数据成员为类的各个对象共享,那么每次创建一个类的对象则静态数据成员都要被重新初始化。

    -----------------------

    那什么静态成员能在类内初始化呢?

    能在类中初始化的静态成员只有一种,那就是静态常量成员。

     1 //这样不行 
     2 class A { 
     3 private: 
     4     static int count = 0; // 静态成员不能在类内初始化 
     5 };
     6  
     7 //这样也不行 
     8 class A { 
     9 private: 
    10     const int count = 0; // 常量成员也不能在类内初始化 
    11 };
    12  
    13 //但是这样可以 
    14 class A { 
    15 private: 
    16     static const int count = 0; // 静态整型常量成员可以在类内初始化,但是 static const float count就不行了 
    17 };

    补充一下更深入的解释:C/C++ 中 static 的用法全局变量与局部变量 | 菜鸟教程 (runoob.com)

    天涯犹在,不诉薄凉。
  • 相关阅读:
    Swift入门篇-Hello World
    Swift入门篇-swift简介
    Minecraft 插件 world edit 的cs 命令
    搭建本地MAVEN NEXUS 服务
    MC java 远程调试 plugin 开发
    企业内部从零开始安装docker hadoop 提纲
    javascript 命令方式 测试例子
    ca des key crt scr
    JSF 抽象和实现例子 (函数和属性)
    form 上传 html 代码
  • 原文地址:https://www.cnblogs.com/Knight02/p/14801473.html
Copyright © 2011-2022 走看看