标签:int 参数传递 友元函数 ted 处理 初始化 get name col
标识符的作用域与可见性
函数原形作用域
局部作用域
void fun(int a) {
int b = a;
cin >> b;
if (b > 0) {
int c;
......
}
}
类作用域
文件作用域
可见性
对象的生存期
静态生存期
动态生存期
类的静态数据成员
案例:
#include <iostream>
using namespace std;
class Point { //Point类定义
public: //外部接口
Point(int x = 0, int y = 0) : x(x), y(y) { //构造函数
//在构造函数中对count累加,所有对象共同维护同一个count
count++;
}
Point(Point &p) { //复制构造函数
x = p.x;
y = p.y;
count++;
}
~Point() { count--; }
int getX() { return x; }
int getY() { return y; }
void showCount() { //输出静态数据成员
cout << " Object count = " << count << endl;
}
private: //私有数据成员
int x, y;
static int count; //静态数据成员声明,用于记录点的个数
};
int Point::count = 0;//静态数据成员定义和初始化,使用类名限定
int main() { //主函数
Point a(4, 5); //定义对象a,其构造函数回使count增1
cout << "Point A: " << a.getX() << ", " << a.getY();
a.showCount(); //输出对象个数
Point b(a); //定义对象b,其构造函数回使count增1
cout << "Point B: " << b.getX() << ", " << b.getY();
b.showCount(); //输出对象个数
return 0;
}
上面案例中,我们需要记录下point类的对象的数目,我们不可能将这个变量存放于类的私有成员中,因为这样只能通过对象取访问,并且每声明一个类的对象,这个数目就要增加1。因此,我们可以将其定义为类的静态成员变量,这个变量是为所有的类对象共有的。但是,这样也会存在一个问题:当没有定义类的对象时,我们能不能知道类对象的个数呢?如果要通过类的对象来访问这个变量的话,那么需要先声明一个对象,但是类的对象还没有被声明,如何解决这个问题呢?这就需要用到类的静态函数成员了。
类的静态函数成员
将上面的程序稍作修改,如下:
#include <iostream>
using namespace std;
class Point {
public:
Point(int x = 0, int y = 0) : x(x), y(y) { count++; }//构造函数
Point(Point &p) { //复制构造函数
x = p.x;
y = p.y;
count++;
}
~Point() { count--; }
int getX() { return x; }
int getY() { return y; }
static void showCount() {
cout << " Object count = " << count << endl;
}
private:
int x, y;
static int count; //静态数据成员声明,用于记录点的个数
};
int Point::count = 0;//静态数据成员定义和初始化,使用类名限定
int main() {
Point a(4, 5); //定义对象a,其构造函数回使count增1
cout << "Point A: " << a.getX() << ", " << a.getY();
Point::showCount(); //输出对象个数
Point b(a); //定义对象b,其构造函数回使count增1
cout << "Point B: " << b.getX() << ", " << b.getY();
Point::showCount(); //输出对象个数
return 0;
}
我们在函数中增加了一个静态成员函数:showcount(),那么在访问类的静态成员变量时就可以不通过对象来访问,而是通过这个静态成员函数来访问,即使没有声明类的对象。但是静态成员函数不能直接访问对象的数据成员,而是要将对象传递给静态函数才可以访问。
类的友元
友元函数
友元类
标签:int 参数传递 友元函数 ted 处理 初始化 get name col
原文地址:https://www.cnblogs.com/puheng/p/9296925.html