#学习自用#
类
c++中的类与c中的结构体类似,都是为了方便变量的管理,c++中通过class创新的变量类型。
class playerinfo
{
public:
int x,y;
int speed;
};
创建的末尾记得加分号。public意味着可以在类之外的任何地方访问类中的变量,如果c++中不声明则默认是private,在main函数中无法访问,这也是类与结构体的区别,类中的变量如果不声明默认private,在其他函数中无法调用,而结构体内的变量默认public。
方法
类中内置的函数称为方法,处于类之外的函数要对类中的变量,需要传入类的指针,而方法位于类的内部,则不需要传指针。
#include<iostream>
using namespace std;
class playerinfo
{
char name;
int x,y;
int speed;
public:
void move(int a,int b)
{
x=a;
y=b;
}
};
void main()
{
playerinfo p;
p.move(2,3);
cin.get();
}
调试过程中,在内存中查看p.x,p.y可知,方法move改变了类中private的部分。
静态
在同一项目下两个.cpp文件中,如果全局变量中出现同一个变量名,系统就会报错,这时将其中一个文件中的变量定义前加上static,这时就可以通过编译。使用static后这个变量只会在翻译单元的作用域内寻找这个变量的定义,所以不会发生重定义。
如果想使用另一个文件下的全局变量,可使用extern,这时连接器就会在作用域外去寻找这个变量的定义。
结构体中的静态
static可以让结构体(或者类)中的变量变成只有一个实例,也就是不管构建几个结构体变量,其中的成员(本例中的x)都指向唯一地址。
#include<iostream>
using namespace std;
struct entity
{
static int x;
int y;
void print()
{
cout<<x<<","<<y<<endl;
}
};
int entity::x;
void main()
{
entity i;
entity p;
p.x=1;
p.y=2;
i.x=3;
i.y=4;
p.print();
i.print();
cin.get();
}
注意需要对静态成员x进行声明,否则会报错。静态变量的调用可以使用 entity::x
静态的方法不能访问静态的变量。