C++ 静态属性和静态方法

本文介绍了C++中类的静态成员和非静态成员的访问规则。静态成员为所有对象共享,不能在静态方法中访问非静态成员。非静态方法可以访问静态和非静态成员。通过示例展示了如何在派生类中继承和使用静态成员,以及在主函数中动态跟踪宠物类(Pet)实例的数量。

静态成员是所有对象共享的,所以不能在静态方法里访问非静态的元素。

非静态方法可以访问类的静态成员,也可以访问类的非静态成员

#include <iostream>
#include <string>

class Pet
{
public:
    Pet(std::string theName);
    ~Pet();
    static int getCount();
protected:
    std::string name;
private:
    static int count; //count属于private成员,只有Pet类里面的方法能访问。因此编写了方法    static int getCount();
                        //且外部方法不能修改此值。只有上面的析构函数和构造函数能修改。
};

class Dog:public Pet
{
public:
    Dog(std::string theName);
};

class Cat:public Pet
{
public:
    Cat(std::string theName);
};

int Pet::count = 0;  //注意,这一句 :分配静态变量的内存区域,并进行初始化,不可少。
//分配内存方法如上,即ClassName::methodName();

Pet::Pet(std::string theName)
{
    name = theName;
    count++;
    std::cout<<"一共出生的宠物名为"<<name <<"\n";   
}

Pet::~Pet() //析构,宠物死亡,计数器减
{
    count--;
    std::cout<<name<<"die";

}

int Pet::getCount()
{
    return count;
}

Dog::Dog(std::string theName):Pet(theName)
{

}
Cat::Cat(std::string theName):Pet(theName)
{

}

int main()
{
    Dog dog ("tom");
    Cat cat("Jerry");
    std::cout<<"诞生了宠物个数"<<Pet::getCount();
    {//注意这个大括号,尝试去掉观察结果变化
        Dog dog_2("Tom_2");
        Cat cat_2("Jerry_2");

        std::cout<<"现在已经诞生了宠物个数"<<Pet::getCount();

    }
    std::cout<<"还有宠物个数"<<Pet::getCount();
    return 0;
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alocus_

如果我的内容帮助到你,打赏我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值