【C++】【学习笔记】【021-022】静态属性和静态方法

静态属性静态方法:
1、C++允许我们把一个或多个成员声明为属于某个类,而不是仅仅属于该类的对象;这么做的好处是程序员可以在没有创建任何对象的情况下调用有关的方法;另外一个好处是能够让有关的数据在该类的所有对象间共享;
2、创建一个静态属性和静态方法,只需要在它的声明前加上static保留字即可;
3、对于静态属性,在类中声明的同时,需要同时在类的外面额外定义并初始化该属性对应的内存;
   Type<int> Class::StaticAttr = 0;
4、静态方法的实现中,只能使用静态属性,不能使用非静态属性;因为非静态属性在创建对象的时候才会分配内存,而静态方法不用创建对象就可以由类直接调用;
5、静态方法可以由类直接调用,也可以由类的对象进行调用;非静态方法(普通方法)只能由类的对象进行调用;
6、静态方法也可以由对象来调用,但不建议那么做,因为那会让代码变得更糟糕;
类别
非静态方法(普通方法)
静态方法
类调用
不允许
Class::StaticMethod();
对象调用
Object.Method();
Object.StaticMethod();
不建议使用
7、静态成员是所有对象共享的,所以不能在静态方法里访问非静态属性;
8、非静态方法可以访问类的静态成员,也可以访问类的非静态成员;
9、this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在对象的地址;
10、当一个对象被创建时,该对象的this指针就自动指向对象数据的首地址;
11、每当我们调用一个方法的时候,this指针都会随着提供的输入参数被秘密地传递给那个方法;正是因为如此,我们才能在方法里像使用一个局部变量那样使用this指针;
12、静态方法不是属于某个特定的对象,而是由全体对象共享的,这就意味着他们无法访问this指针,因为this指针是指向对象的。

示例:静态属性和静态方法

#include <iostream>
#include <string>

class Pet
{
public:
    Pet(std::string theName);
    ~Pet();

    static int getCount();

protected:
    std::string name;

private:
    static int count; // 申明静态变量
};

int Pet::count = 0; // 静态变量需要对应的存储空间

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

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

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;
}
输出:
一只宠物出生了,名字叫做: Tom
一只宠物出生了,名字叫做: Jerry

已经诞生了2只宠物!

一只宠物出生了,名字叫做: Tom_2
一只宠物出生了,名字叫做: Jerry_2

现在呢,已经诞生了4只宠物!

Jerry_2挂掉了
Tom_2挂掉了

现在还剩下 2 只宠物!

Jerry挂掉了
Tom挂掉了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值