静态成员
问:假设在main函数中创建了许多个Person类对象,要怎么在代码中统计一共创建了多少个Person类对象呢?
答:可以使用静态成员,在Person类中创建一个静态成员cnt,在构造函数中,将cnt++。
同时,由于cnt是private成员,需要在创建一个公共的成员函数getCnt来获取cnt,注意getCnt也需要是静态的。

然后在main函数中调用getCnt函数,就可以获取cnt值了。
注意一点,我们需要创建一个全局变量Person::cnt,否则,cnt实际上是不会存在的,因为只是在Person类的定义中说存在这样的变量,那个操作并不会去创建这个变量。

编译测试结果如下,确实创建了14个Person类的变量。

由于设置了static,所以实际上,Person::cnt变量只有一个,它是属于Person这个类的,不管创建了多少个Person类的对象,Person::cnt都是同一个。

如下图所示,Person::getCnt(),per[0].getCnt(),per[1].getCnt(),获取到的cnt值都是相同的。

友员
假设有下列代码,声明了一个Point类,这个类有两个私有成员 x 和 y,分别代表x轴和y轴的坐标。

可以通过一系列的get和set函数来读取和写入x,y值,通过printInfo函数输出x,y值。
#include <stdio.h> #include <iostream> #include <string.h> #include <unistd.h> using namespace std; class Point { private: int x; int y; public: Point() {} Point (int x, int y) : x(x), y(y) {} int getX() { return x; } int getY() { return y; } void setX(int x) { this->x = x; } void setY(int y) { this->y = y; } void printInfo() { cout << "(" << x << ", " << y << ")" << endl; } }; Point add(Point &p1, Point &p2) { Point n; n.setX(p1.getX() + p2.getX()); n.setY(p1.getY() + p2.getY()); return n; } int main(int argc, char argv) { Point p1(1, 2); Point p2(2, 3); Point sum = add(p1, p2); sum.printInfo(); return 0; }
讯享网
其中还有一个add函数,可以将两个坐标的坐标值相加,注意传参使用了引用,这样只要传入4字节的地址值,而不用将全部数值传入。
通过getX和getY获取坐标值,通过setX和setY设置坐标值。

在main函数中调用add函数,然后调用printInfo函数将相加后的新坐标值打印出来。

问:在add函数中,我们调用一共调用了6次函数,才将两个坐标相加,是否有更快捷的办法?
答:有,可以使用友员,将add函数设置为Point类的友员函数,这样add函数就可以直接访问Point类的私有成员,而不是通过函数来调用它们。
在Point类的申明中,将add函数申明为友员函数。

之后就可以在add函数中使用Point类的私有成员了。

测试结果和之前一样。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/24484.html