zoukankan      html  css  js  c++  java
  • 静态成员变量和静态成员函数

    普通成员变量是对象各自独有的,不会相互之间影响,但是静态成员变量是共用的。sizeof不会把静态成员变量计算进去。

    普通成员函数必须具体作用于某个对象,而静态成员函数不具体作用于某个具体对象。静态成员访问时和普通成员访问相比多了一种即通过类名进行访问。

    静态成员变量和函数本质上是全局变量和函数。我们在使用时,应该在类外面进行初始化或者说明,否则编译能通过,但是链接不能通过。

    在静态成员函数中不能访问非静态成员变量和非静态成员函数。因为静态成员函数不作用于具体的对象上。

    在使用静态成员变量和函数时会存在安全隐患,因为不是所有的对象在创建时都是通过构造函数进行创建的,还可以通过复制构造函数进行创建,这样就会导致程序出现错误。解决办法就是重写复制构造函数,保证程序运行正确。

    #include <iostream>
     
    using namespace std;
     
    class Crectangle
    {
    private:
        int width, length;
        static int NumTotal;
        static int TotalSize;
    public:
        Crectangle(int w, int l)
        {
            width = w;
            length = l;
            NumTotal += 1;
            TotalSize += w*l;
        }
        Crectangle(Crectangle & c)
        {
            width = c.width;
            length = c.length;
            NumTotal += 1;
            TotalSize += w*l;
        }
        static void print(void)
        {
            cout << NumTotal << endl;
            cout << TotalSize << endl;
        }
        ~Crectangle()
        {
            NumTotal -= 1;
            TotalSize -= width*length;
        }
    };
    int Crectangle::TotalSize = 0;
    int Crectangle::NumTotal = 0;
    int main()
    {
        Crectangle rec1(3, 4), rec2(4, 9);
        Crectangle::print();
        return 0;
    }

     参考链接:

    https://www.coursera.org/learn/cpp-chengxu-sheji

  • 相关阅读:
    【Node.js】Jade视图模板的使用
    【Node.js】新建一个NodeJS 4.X项目
    【Node.Js】npm国内被墙的解决方法
    【AngularJS学习笔记】Java Script "use strict" 严格模式
    【Linux学习笔记】Linux-CentOS下安装Redis
    【Linux学习笔记】常用命令速记
    【AngularJS学习笔记】封装一些简单的控件(封装成Html标签)
    数组和切片1
    Go错误处理机制及自定义错误
    内置函数
  • 原文地址:https://www.cnblogs.com/helloforworld/p/5652814.html
Copyright © 2011-2022 走看看