静态函数跟友元

静态函数和友元
函数如下:
#include<iostream>
using namespace std;
class A
{
private:
int i;
public:
static int k;
A(int j = 1);
friend void display(A &a);
};
A::A(int j)
{
i = j;
k++;
}
int A::k = 0;
void display(A &a)
{
cout << "i=" << a.i << "k=" << a.k << endl;
}
int main()
{
A b(2), c;
display(b);
A::k++;
display(c);
return(0);
}


不太懂
int A::k = 0; 
此处作用,这儿是否默认k的值恒定为零,以及输出结果第一次k值为什么是2,第二次i没定值为什么i=1
------解决思路----------------------
此处作用,这儿是否默认k的值恒定为零,以及输出结果第一次k值为什么是2,第二次i没定值为什么i=1 
不是恒定为0,你是不是和const搞混了。这里是说让A创建的对象都能看到k,你第一次运行,直接让b的i为2了c也调用构造函数,因为你初始化了j为1,默认调用,i为1,k++了两次。所以输出2  2
第二次运行前k++,此时k为3.所以输出1  3。不知道你懂没有,我也是刚入门,希望说的是对的~
------解决思路----------------------

int A::k = 0;

静态成员的初始化方式,静态成员是属于类的,并非属于某个对象。

cout << "i=" << a.i << "k=" << a.k << endl;

你确定静态成员k能这样输出?至于输出2,构造时自增,主函数里你又自增了一次。