#include<iostream>
using namespace std;
class DATE
{
public:
DATE(int x)
:t(x)
{
cout << t<<" "<<d << endl;
}
private:
int t = 1;
int d = 2;
};
int main()
{
DATE ti(0);
return 0;
}
#include<iostream>
using namespace std;
class A
{
public:
A(int x)
:t(x)
{
}
void print()
{
cout << t << endl;
}
private:
int t = 1;
};
int main()
{
A tt=10;
tt.print();
return 0;
}
#include<iostream>
using namespace std;
class A
{
public:
A(int x)
:t(x)
{
}
void print() const
{
cout << t <<" "<< b << endl;
}
private:
int t = 1;
static int b;
};
int A::b = 100;
int main()
{
A tt=10;
tt.print();
return 0;
}
#include<iostream>
using namespace std;
class A
{
public:
A(int x)
:t(x)
{
}
static void print(const A& tt)
{
cout << tt.t <<" "<< b << endl;
}
private:
int t = 1;
static int b;
};
int A::b = 100;
int main()
{
A tt=10;
tt.print(tt);
return 0;
}
如果函数外打印静态成员的话,我们可以通过调用函数简介访问:
cpp复制代码
static int getnum()
{
return b;
}
5、友元
友元是一种声明,可以用过友元声明突破访问限定。
cpp复制代码
#include<iostream>
using namespace std;
class A
{
public:
A(int x)
:t(x)
{
}
friend int add(const A& a);
private:
static int b;
int t = 1;
};
int add(const A& a)
{
return a.b + a.t;
}
int A::b = 100;
int main()
{
A tt = 10;
cout << add(tt) << endl;
return 0;
}
例如上面这串代码,我们把add函数声明成友元,那么add函数就可以访问A里面的私有成员。
我们也可以把一个类定义成另一个类的友元:
cpp复制代码
#include<iostream>
using namespace std;
class B
{
friend class A;
private:
int r = 5;
};
class A
{
public:
A(int x)
:t(x)
{
}
void print(const B& R)
{
cout << R.r << endl;
}
private:
static int b;
int t = 1;
};
int A::b = 100;
int main()
{
A tt = 10;
B bb;
tt.print(bb);
return 0;
}
class A
{
private:
static int _k;
int _h = 1;
public:
class B // B默认就是A的友元
{
public:
void foo(const A& a)
{
cout << _k << endl; //OK
cout << a._h << endl; //OK
}
int _b1;
};
};
int main()
{
A::B b;
}
7、匿名对象
用类型定义出来的对象叫匿名对象,匿名对象生命周期只有一行。
cpp复制代码
#include<iostream>
using namespace std;
class B
{
friend class A;
private:
int r = 5;
};
class A
{
public:
A(int x=8)
:t(x)
{
}
void print(const B& R)
{
cout << R.r << endl;
}
private:
static int b;
int t = 1;
};
int A::b = 100;
int main()
{
B bb;
A().print(bb);
return 0;
}