zoukankan      html  css  js  c++  java
  • c++第七章-(静态属性和静态方法)

    1.静态属性和静态方法

    静态方法的调用,ClassName::mothodName();

    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;//初始化静态变量
    
    Pet::Pet(std::string theName)
    {
        name = theName;
        count++;
        std::cout << "一只宠物出生了,名字叫做:" << name << std::endl;
    }
    
    Pet::~Pet()
    {
        count--;
        std::cout << name << "挂掉了
    ";
    }
    
    int Pet::getCount()
    {
        return count;
    }
    
    Dog::Dog(std::string theName):Pet(theName)
    {
        
    }
    Cat::Cat(std::string theName):Pet(theName)
    {
        
    }
    int main(int argc, const char * argv[])
    {
        Dog dog("Tom");
        Cat cat("Jerry");
        
        std::cout << "
    已经诞生了" << Pet::getCount() << "只宠物!
    
    " ;
        
        {//作用域的作用
            Dog dog2("Tom_2");
            Cat cat2("Jerry_2");
            
            std::cout << "
    现在呢,已经诞生了" << Pet::getCount() << "只宠物!
    
    " ;
        }
    
        std::cout << "
    现在还剩下 "
        << Pet::getCount()
        << " 只宠物!
    
    ";
        
        return 0;
    }

    控制台返回的结果:

    一只宠物出生了,名字叫做:Tom
    一只宠物出生了,名字叫做:Jerry
    
    已经诞生了2只宠物!
    
    一只宠物出生了,名字叫做:Tom_2
    一只宠物出生了,名字叫做:Jerry_2
    
    现在呢,已经诞生了4只宠物!
    
    
    现在还剩下 4 只宠物!
    
    Jerry_2挂掉了
    Tom_2挂掉了
    Jerry挂掉了
    Tom挂掉了

     2.this指针

    • this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址。
    • 当一个对象被创建时,该对象的this指针就自动指向对象数据的首地址。
    • 在程序运行时,对象的属性和方法都是保存在内存里,这意味着他们各自都有与之相关联的地址(对象的地址)。这些地址都可以通过指针来访问,而this指针无需置疑是保存着对象本身的地址。
    class Point
    {
    public:
        Point(int a,int b)
        {
            this->x = a;
            this->y = b;
        }
        ~Point()
        {
            std::cout << "this  = " << this << std::endl;//打印this地址
        }
        void MovePoint(int a,int b)
        {
            this->x = a;
            this->y = b;
        }
        void print()
        {
            std::cout << "x="
            << this->x
            << "
    y="
            << this->y << std::endl;
        }
    private:
        int x,y;
    };
    
    int main(int argc, const char * argv[])
    {
        Point point(10,10);
        std::cout << "point = " << &point << std::endl;//验证this指针与point是否同一个地址
        point.MovePoint(2, 2);//其实传到时候是以MovePoint(&point,2, 2);的形式传过去,只不过是将第一个参数隐藏了
        point.print();
     
        return 0;
    }

    控制台返回的结果:

    point = 0x7fff5fbff8b8
    x=2
    y=2
    this  = 0x7fff5fbff8b8
  • 相关阅读:
    mySQL教程 第1章 数据库设计
    System center virtual machine manager 2008 R2安装部署及实战技术
    cisco ssh配置
    IPv6地址介绍
    远程桌面如何复制本地文件 远程桌面拷贝电脑上的文件方法
    mySQL教程 第2章 准备学习用到的表和数据
    十四个ASP.NET基础知识问答(C#版)
    十四个ASP.NET基础知识问答(C#版)
    关闭框架网页(C#)
    关闭框架网页(C#)
  • 原文地址:https://www.cnblogs.com/huen/p/3823944.html
Copyright © 2011-2022 走看看