首页 > 其他分享 >14静态成员变量,静态成员函数,常成员方法

14静态成员变量,静态成员函数,常成员方法

时间:2024-01-16 10:59:22浏览次数:22  
标签:Goods const 14 静态 成员 int name

静态成员变量,静态成员函数,常成员方法

  • 静态成员变量是类级别共享的,都可以用类名作用域来调用或查询。
  • 静态成员变量不属于类对象在类中声明,在类外定义。相当于一个以类为作用域的全局变量。
  • 静态成员函数没有 this 指针,只能访问静态成员变量和静态成员函数。
class Date {
public:
    Date(int y, int m, int d);
private:
    int _year;
    int _month;
    int _day;
};

Date::Date(int y, int m, int d) :
    _year(y), _month(m), _day(d)
{}

class Goods {
public:
    Goods(const char* name, int amount, double price, int y, int m, int d);
    static int getNum() {
        return _num;
    }
private:
    char* _name;
    int _amount;
    double _price;
    Date date; 
    static int _num;
};
int Goods::_num = 0;
Goods::Goods(const char* name, int amount, double price, int y, int m, int d) :
    _amount(amount),
    _price(price),
    date(y, m, d)
{
    _num++;
    _name = new char[strlen(name) + 1];
    strcpy(_name, name);
}

int main() {
    Goods good1("nn", 100, 20.0, 2000, 3, 7);
    Goods good2("nn", 100, 20.0, 2000, 3, 7);
    Goods good3("nn", 100, 20.0, 2000, 3, 7);
    Goods good4("nn", 100, 20.0, 2000, 3, 7);
    cout << Goods::getNum() << endl;
    cout << good4.getNum() << endl; //也可以
    return 0;
}
  • 如何保护const变量的指针?
  • 下述show方法由于使用了this指针,所以产生类型转换冲突。
  • 常成员方法:函数后加入const限定符,相当于给this指针加上const限定符。
  • 只要是只读成员的方法,都要实现成常成员方法,常成员方法对对象只能读不能写。
class Goods {
public:
    Goods(const char* name, int amount, double price, int y, int m, int d);
    void show() {
        cout << _name << '\\' << _amount << '\\' << _price << '\\' << endl;
    }
    void cshow() const{ //会给this指针加上const限定符
        cout << _name << '\\' << _amount << '\\' << _price << '\\' << endl;
    }
......
};
int main() {

    const Goods good1("nn", 100, 20.0, 2000, 3, 7);
    good1.show(); //不可以,此过程隐式将const Goods*转换为Goods*,这是不被允许的(this指针类型为Goods*)
    good1.cshow(); //可以
    return 0;
}- 

标签:Goods,const,14,静态,成员,int,name
From: https://www.cnblogs.com/sio2zyh/p/17967121

相关文章

  • 15指向成员变量和成员方法的指针
    指向成员变量和成员方法的指针指向成员变量的指针classTest{public: intma; staticintmb;};intTest::mb;intmain(){//类对象的成员变量指针不是普通的指针,需要加入类名限定符//类的静态成员变量指针不针对某一个特定对象,使用普通指针 int*p=&Tes......
  • CDN静态资源加速&Lighthouse性能监测
    本文主要介绍了cdn加速在项目中的实现,以及使用Lighthouse对前端性能指标进行监测打分。Lighthouse简介Lighthouse是谷歌开发并开源的web性能测试工具,用于改进网络应用的质量,可以将其作为一个Chrome扩展程序运行,或从命令行运行。只需要为其提供一个需要审查的地址,Lighthouse就会......
  • 【2024-01-14】中庸之道
    20:00历史必须从中华帝国说起,因为根据史书记载,中国实在是最古老的国家;它的原则又具有那一种实体性,所以它既是最古的,同时又是最新的帝国。                                           ......
  • CF1437F Emotional Fishermen 题解
    题意:有\((n\le5000)\)个渔民,每个渔民钓了一条重\(a_i\)的鱼,渔民按任意顺序展示他们的鱼。若当前渔民的鱼的重量为\(x\),之前展示过的鱼的最大重量\(y\)。一个排列满足条件当且仅当对于每个\(x\),满足\(2y\lex\)或\(2x\ley\)。问有多少个排列满足条件,对\(998244353......
  • Ubuntu14.04 设置共享文件夹
    由于工作原因需要使用Ubuntu14.04,尽量使用desktop版本。1、设置共享文件夹2、安装VMwareTools在虚拟机菜单中点击虚拟机,安装VMwareTools,然后会跳出有VMwareTools安装包的光盘sudocpVMwareToolsXX.tar.gz/homecd/hometar–xvfVMwareToolsXX.tar.gzcdvmware-too......
  • CF1409D题解
    思路因为数据较大,使用字符串读入。考虑使用贪心。先统计出当前数码之和。然后从低位往高位枚举,看一下把当前位改了之后是否小于等于\(s\)。如果小于的话,则统计出把当前位往后所有位都改为0,\(k\)为多少,求出的\(k\)就是最优解。说明一下为什么要从低位往高位枚举,这样如果成......
  • 1月14日总结
    果用到动态代理,大家可能会有几种选择,排到前列的是Autofac+Castle、AspectCore和DoraInterception,我将从我当时研究的经历,以及我遇到的场景,为大家展示下聊一聊我为什么要费时费力的整合Microsoft.Extensions.DependencyInjection和Castle.Core当时遇到的场景直接上源码public......
  • 14_Java基础-运算符3:逻辑运算符+位
    逻辑运算符&&(与)逻辑与运算,两个变量都为真,结果为true||(或)逻辑或运算,两个变量有一个为真,结果为true!(非)如果是真,则变为假,如果是假则变为真短路运算第一个数为错,后面不执行位运算符&(和)|(或)^(异或)~(取反)位运算,不要轻易用,容易出错,效率极高<<:左移:x2》》:右移:/2......
  • 题解「JOI 2014 Final」IOI 馒头
    传送门。题意有\(n\)个物品,\(m\)个背包。第\(i\)个物品的价值是\(P_i\),第\(j\)个背包可以装\(C_i\)个物品,但会消耗\(E_i\)的价值。背包不能重复买,问最多可以获得多少价值。分析首先一个简单的贪心,我们在购买背包后塞入物品,一定时从大往小塞,也就是说,我们可以先对......
  • 上周热点回顾(1.8-1.14)
    热点随笔:· 为什么Java中“1000==1000”为false,而”100==100“为true? (YSOcean)· 微软用它取代了`Nginx`吞吐量提升了百分之八十! (tokengo)· 园子开店记-周边第一款:收到鼠标垫样品(新增另外3款照片) (博客园团队)· 别让“防御性编程”毁了我们的职业 (MeteorSeed)· 屎......