静态属性和静态方法

/*
	我们真正需要的是一个只在创建或删除对象时候才允许访问的计数器。
	这个问题必须使用 C++ 的静态属性和静态函数才能完美地得到解决。
	C++ 允许我们把一个或多个成员声明为属于某个类,而不是仅属于该类的对象。
(就是说这个成员仅能让该类使用)
这么做的好处是程序员可以在没有创建任何对象的情况下调用有关的方法。


	另外一个好处是能够让有关的数据仍在该类的所有对象间共享。
	创建一个静态属性和静态方法:
	只需要在它的声明前加上 static 保留字即可
	
	static 是 C/C++ 中很常用的修饰符,它被用来控制变量的存储方式和可见性。
	
	(1)在修饰变量的时候,static 修饰的静态局部变量只执行初始化一次,
	而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
	
	(2)static 修饰全局变量的时候,这个全局变量只能在本文件中访问,
	不能在其它文件中访问,即便是 extern 外部声明也不可以。
	
	(3)static 修饰一个函数,则这个函数的只能在本文件中调用,
	不能被其他文件调用。static 修饰的变量存放在全局数据区的静态变量区,
	包括全局静态变量和局部静态变量,都在全局数据区分配内存。
	初始化的时候自动初始化为 0。
	
	(4)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。
	如果不想让这个数组在函数调用结束释放可以使用 static 修饰。
	
	(5)考虑到数据安全性(当程序想要使用全局变量的时候应该先考虑使用 static)。

*/


#include <iostream>
#include <string>

class Pet
{
public:
    Pet(std::string theName);
    ~Pet();
	//接口 获取计数器 
    static int getCount();

protected:
    std::string name;

private:
    static int count;
};

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

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

int Pet::count = 0;         // 注意这一句:他起码做了两件事  分配内存  初始化为0 

Pet::Pet(std::string theName)
{
    name = theName;
    //计数器加一
    count++;

    std::cout << "一只宠物出生了,名字叫做: " << name << "\n";
}

Pet::~Pet()
{
	//计数器减一 
    count--;
    std::cout << name << "挂掉了\n";
}

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 << "\n已经诞生了" << Pet::getCount() << "只宠物!\n\n";


        Dog dog_2("Tom_2");
        Cat cat_2("Jerry_2");

        std::cout << "\n现在呢,已经诞生了" << Pet::getCount() << "只宠物!\n\n";


    std::cout << "\n现在还剩下 " << Pet::getCount() << " 只宠物!\n\n";

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值