栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++笔记(五)——静态成员

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++笔记(五)——静态成员

文章目录
  • 1. 静态数据成员
  • 2. 静态成员函数
  • 3. 习题

1. 静态数据成员

静态数据成员是一种特殊的数据成员,他以关键字static开头

static int height;
  1. 静态数据成员不属于某一个对象,在为对象分配的空间中不包括静态数据成员所占的空间。静态数据成员是在所有对象之外单独开辟空间。只要类中定义了静态数据成员,即使不定义对象,也为静态数据成员分配空间,它可以被引用

  2. 静态数据成员可以初始化,但只能在类体外进行初始化

    一般形式为:数据类型 类名::静态数据成员名 = 初值

    int Box::height = 10;
    
  3. 静态数据成员既可以通过对象名引用,也可以通过类名来引用

    cout << Box::height << endl;
    
2. 静态成员函数

成员函数也可以定义为静态,在类中声明函数的前面加static就成了静态成员函数

static int volume();

如果要在类外调用静态成员函数,要用类名和域运算符::

Box::volume();

静态成员函数与非静态成员函数的根本区别在于:静态成员函数没有this指针,因为它不属于某一个对象,他与任何对象都无关,这就意味着静态成员函数可以直接引用类中的静态数据成员,而不能默认访问非静态数据成员。若要在静态成员函数中访问非静态数据成员,需要通过成员运算符进行指定,如下代码为静态成员函数体内

cout << width << endl;	// 若width已声明为静态数据成员,合法
cout << a.width << endl;	// 若width为非静态数据成员
3. 习题

商店销售某一商品,商店每天公布统一的折扣。同时允许销售人员在销售时灵活掌握售价,再次基础上,对一次购10件以上者,还可以销售9.8折优惠。现一直当天3名销货员的销售情况为:

售货员号(num)售货件数(quantity)售货单价(price)
101523.5
1021224.56
10310021.5

请编写程序,计算当日次商品的总销售款sum,以及没见商品的品骏售价。要求用静态数据成员和静态成员函数。(提示:将折扣discount、总销售款sum、商品销售总件数n声明为静态数据成员,再定义静态成员函数average(求平均售价)和dispaly(输出结果))

#include
using namespace std;

class Buy
{
    public:
        Buy(float ,float);
        void display();
        void total(Buy &);
        static float average();
    private:
        float quantity,price;
        static float discount,sum,n;
};

float Buy::discount = 0.98;
float Buy::sum = 0;
float Buy::n = 0;

Buy::Buy(float q,float p):quantity(q),price(p){}

void Buy::display()
{
    cout << "Total sales = " << sum << endl;
    cout << "average = " << average() << endl;
}

void Buy::total(Buy &b)
{
    if(b.quantity <= 10)
    {
        sum += b.quantity * b.price;
    }
    else
    {
        sum += b.quantity * b.price * discount;
    }

    n += b.quantity;
}

float Buy::average()
{
    return (sum / n);
}

int main()
{
    Buy b1(5, 23.5);
    b1.total(b1);
    Buy b2(12, 24.56);
    b2.total(b2);
    Buy b3(100, 21.5);
    b3.total(b3);

    b3.average();
    b3.display();
    return 0;
}


下一章:友元 & 类模板

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429493.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号