指针指向类的静态数据成员

1. 代码

 1 #include<iostream>
 2 #include<stdio.h>
 3 using namespace std;
 4 class Point
 5 {
 6     public:
 7     Point(int x=0,int y=0):x(x),y(y)
 8     {
 9        count++;
10     }
11     Point(const Point &p):x(p.x),y(p.y)
12     {
13        count++;
14     }
15     ~Point(){ count--;}
16     int getx() const {return x;}
17     int gety() const {return y;}
18     static int count;//注意要定义到public的下面,才有访问权限
19     private:
20     int x,y;
21 };
22 int Point::count=0;  //静态数据成员定义和初始化,使用类名限定
23 int main()
24 {
25     int *ptr=&Point::count;  //定义一个int型指针,指向类的静态成员
26     Point a(4,5);
27     cout<<"Point A:"<<a.getx()<<","<<a.gety()<<endl;
28     cout<<"object count="<<*ptr<<endl;
29     Point b(a);    //用类的一个对象做另一个对象的参数,调用复制构造函数
30     cout<<"Point B:"<<b.getx()<<","<<b.gety()<<endl;
31     cout<<"object count="<<*ptr<<endl;
32     system("pause");
33     return 0;
34 }

2. 运行结果
    和上一次的相同。

Note:count类型是static,且访问权限是public的。

时间: 2024-12-24 06:21:27

指针指向类的静态数据成员的相关文章

C++静态成员函数和静态数据成员

当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享.各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关.静态方法就是与该类相关的,是类的一种行为,而不是与该类的实例对象相关. 静态数据成员的用途之一是统计有多少个对象实际存在. 静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的.也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一

转:C语言中的static变量和C++静态数据成员(static member)

转自:C语言中的static变量和C++静态数据成员(static member) C语言中static的变量:1).static局部变量        a.静态局部变量在函数内定义,生存期为整个程序运行期间,但作用域与自动变量相同,只能在定义该变量的函数内使用.退出该函数后, 尽管该变量还继续存在,但不能使用它.        b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值.而对自动变量不赋初值,则其值是不定的.2).static全局变量        全局变量本身就是静

static静态数据成员

类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员.和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则.同时,静态数据成员还具有以下特点: 1.C++静态数据成员的定义. 静态数据成员实际上是类域中的全局变量.所以,静态数据成员的定义(初始化)不应该被放在头文件中. 其定义方式与全局变量相同.举例如下: xxx.h文件 1. class base{      2. private:      3. static con

C++ 静态数据成员和静态成员函数

一 静态数据成员: 1.静态数据成员的定义. 静态数据成员实际上是类域中的全局变量.所以,静态数据成员的定义(初始化)不应该被放在头文件中,因为这样做会引起重复定义这样的错误.即使加上#ifndef #define #endif或者#pragma once也不行. 其定义方式与全局变量相同.举例如下: xxx.h文件 class base{ private: static const int _i;//声明,标准c++支持有序类型在类体中初始化,但vc6不支持. }; xxx.cpp文件 con

C++中静态数据成员

类的静态成员不能由类的构造函数来初始化.因为即使不存在类的任何对象时,类的静态成员依然存在并且可以被使用.类的静态成员也不能访问任何类的非静态成员. 类名和类对象都可以直接调用静态数据成员.因为静态数据成员在执行构造函数之前都已经存在了. 但如果静态成员是整型或是枚举型const,则可以在类声明中初始化!! static修饰的函数表示该函数是属于类的,而不是属于某一个对象的,没有this指针. 在C++类的成员变量被声明为static(称为静态成员变量),意味着它为该类的所有实例所共享,也就是说

关于静态数据成员的简单却容易出错的小程序

1 #include "iostream" 2 using namespace std; 3 class complex //声明complex类 4 { 5 public: 6 complex(); 7 void display(); 8 private: 9 static int r; //声明数据成员r是静态的 10 static int i; 11 }; 12 int complex::r=0; //为静态数据成员r赋初始值 13 int complex::i=1; 14 co

C++基础(静态数据成员和静态成员函数)

[1.静态成员] 1.静态数据成员与全局变量一样都是静态分配存储空间的,在编译时,就要为类的静态数据成员分配存储空间.但全局变量在程序中的任何位置都可以访问它,而静态数据成员受到访问权限的约束.必须是public权限时,才可能在类外进行访问. 2.静态数据成员的初始化 (1)*静态数据成员的初始化是在类的源文件(.cpp)中,而不是在类的头文件(.h)中进行的.这是因为类声明位于头文件中,程序可能将头文件包括在其他几个文件中.如果在头文件中进行初始化,将出现多个初始化语句副本,从而引发错误. A

Cocos2d-x 3.1.1 学习日志3--C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员

有关const成员.static成员.const static成员的初始化: 1.const成员:只能在构造函数后的初始化列表中初始化 2.static成员:初始化在类外,且不加static修饰 3.const static成员:类只有唯一一份拷贝,且数值不能改变.因此,可以在类中声明处初始化,也可以像static在类外初始化 #include <iostream> using std::cout; using std::endl; class base { public: base(int

C++类中常量数据成员和静态数据成员初始化

常量数据成员初始化原则: 在每一个构造函数的初始化列表中初始化 静态数据成员初始化原则: 类内声明,类外初始化(因为它是属于类的,不能每构造一个对象就初始化一次) // test_max.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <iostream> #include <vector> using namespace std; class A { public: A(int i):a(0) {} A():