静态数据成员:在类里面声明为static静态数据成员,但是要在类外面定义和初始化静态数据成员。因为这个静态数据成员是属于类的,我们想要在所以的对象定义之前就初始化这个静态数据成员。
静态函数:也是在类里面在函数名前面添加static,在静态函数中不能访问非静态变量。所以静态函数中只能访问静态数据成员。静态函数调用的方法可以是Person::getcount()或者per::getcount()(在Person per;的前提下)
#include <iostream>
using namespace std;
class Person
{
private:
char *name;
int age;
char *work;
static int cnt;
public:
static int getcount(void);
Person()
{
name = NULL;
work = NULL;
cnt++;
}
~Person()
{
cout<<"~Person"<<endl;
}
};
int Person::cnt = 0;
int Person::getcount(void)
{
return cnt;
}
int main(void)
{
Person *per = new Person[50];
cout<<getcount()<<endl;
return 0;
}
打印结果:50,实例化了50个对象,因为没有利用delete释放per指针所以这些对象被销毁之前不会调用析构函数。
在c++中经常使用引用来传参数
友员函数:可以访问对象成员为private的函数
#include <iostream>
using namespace std;
class Point
{
private:
int x;
int y;
public:
Point() {}
Point(int x, int y) : x(x), y(y) {}
int getX(void){ return x; }
int getY(void){ return y; }
void setX(int x){ this->x = x; }
void setY(int y){ this->y = y; }
friend Point add(Point &p1, Point &p2);
void printInfo(void)
{
cout<<"("<<x<<", "<<y<<")"<<endl;
}
};
Point add(Point &p1, Point &p2)
{
Point n;
n.x = p1.x + p2.x;
n.y = p1.y + p2.y;
return n;
}
int main(void)
{
Point p1(1, 2);
Point p2(2, 3);
Point sum = add(p1, p2);
sum.printInfo();
}