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 << "挂掉了\n";
}

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

    {//作用域的作用
        Dog dog2("Tom_2");
        Cat cat2("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只宠物!

现在还剩下 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
        << "\ny="
        << 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

c++第七章-(静态属性和静态方法)

时间: 2024-08-06 12:06:48

c++第七章-(静态属性和静态方法)的相关文章

PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

  前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象类与抽象方法 1.什么是抽象方法?              没有方法体 {} 的方法,必须使用abstract 关键字修饰.这样的方,我们叫做抽象方法.                    abstract function say(); //    抽象方法 2.什么是抽象类?        

类和对象:静态属性、静态方法

在PHP中,使用关键字 static 修饰成员属性和成员方法被称为静态属性和静态方法.静态属性和静态方法不需要在类被实例化的情况下可以直接使用. 静态属性 与普通的成员属性不同,静态属性属于类本身而不属于类的任何实例.静态属性可以被看做是存储在类当中的全局变量,可以在任何地方通过类来访问它们. 由于静态属性不受任何具体对象的限制,所以不需要建立类实例,而可以直接引用类中的静态属性,使用语法格式如下: 类名称::$静态属性名称 其中,符号”::”被称作范围解析操作符,它可以用于访问静态成员.静态方

php静态属性和静态方法学习笔记

在属性和方法前加static修饰可以成为静态属性和静态方法. 静态属性的访问用 类来访问  例如  human::$head 1.类生成完毕,静态属性就已经存在,不需要依赖对象来访问 2.类在内存中只有一个,因此静态属性也只有一个. 普通方法,存放于类内,只有一份 静态方法,也是存放于类内,只有一份. 区别在于,普通方法需要用队形去调动,需要绑定$this,必须要有对象,用对象调动. 而静态方法,不属于哪个对象,属于类,因此不需要用$this去绑定,同过类名就可以调用.

php静态属性和静态方法

php静态属性和静态方法 2012-09-29 10:18 1518人阅读 评论(0) 收藏 举报 phpfunction 本php教程主要是学习php中静态属性和静态方法的使用方法和基本的示例. ·                                 静态属性 静态属性也就是说它的值保持其值,比如在类中实例化了N个对象,那么你可以在构造函数中定义一个静态属性来记住对象的个数.类中的静态属性和静态变量差不多,只不过在类中似乎又多了一个些使用上的限制罢了.让我们看看一般的变量吧: <?

Java静态属性、静态方法、非静态属性、非静态方法的继承问题简单了解

package com.book.web.controller; /**  * 父类  * @author liweihan  *  */ public class Parent { public String normalStr = "父类非静态属性"; public static String staticStr = "父类静态属性"; public String changeStr = "父类-变量"; public static Stri

php之静态属性与静态方法

静态属性用法:static public $var = 1; 从内存角度看,静态属性存放在类内,普通属性存放在对象中,类声明完毕,静态属性就存在,因为类在内存中只有一个,静态也只有一个. 普通属性存放在对象中,用对象->$var来访问,静态属性存放在类内,不依赖对象,没有对象也能访问,用类名::$var来访问,静态属性只有一个,为所有对象共享. 静态方法用法:static public function t(){} 普通方法存放在类内,只有一份,静态方法也存放在类内,也只有一份.区别在于,普通方

static静态属性和静态方法的原理与调用技巧

这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下 本文实例讲述了php中static静态属性和静态方法的调用.分享给大家供大家参考.具体如下: 这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例化对象,就

java之静态属性和静态方法

前言 静态属性和方法必须用static修饰符 静态属性和非静态属性的区别: 1.在内存中存放位置不同   所有带static修饰符的属性或者方法都存放在内存中的方法区  而非静态属性存放在内存中的堆区 2.出现时机不同   静态属性或方法在没创建对象之前就已经存在  而非静态属性在创建对象之后才存在 3.静态属性是在某个类中的所有对象是共享的 4.生命周期不同  静态属性在类消失之后才销毁  而非晶态属性在对象销毁之后才销毁 5.用法: a.静态属性可以直接通过类名直接访问  非静态属性不能通过

面向对象的静态属性和静态方法

一,静态属性 静态属性时该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量 定义静态属性:访问修饰符 static 静态属性名 静态属性的访问: 1.在类的内部 self::静态属性名 类名::静态属性名 2.类的外部 如果要在类的外部访问静态属性,静态属性需要时public,否则不能直接访问 访问形式是: 类名::静态属性名 $this和self的区别 1.使用的方式不同 $this-> self:: 2.self