【C++】struct & class 以及前向声明
class与struct的唯一区别在于:
class
属性中,缺省的默认为private属性,而在struct
中,缺省的默认为public属性
如下,i与p没有显式的访问控制,由于其在class中,故为private
class A{
int i;
int *p;
}
在C++中建议首选class
,但在类简单到无以复加的情况下,也可以使用struct
前向声明
不用使用内部细节时,用前向声明让编译器知道其是什么东西来让编译通过即可。
但若需要使用细节,如下面代码,那么前向声明也不够用
struct Y{
void f(X c);
}
struct X;//前向声明,告诉编译器X是个东西,具体是什么东西你不要管
struct Y{
void f(X*);
//前向声明为了让该句编译能够通过(任何指针大小都一样,故编译器不知道X到底是什么也无所谓)
//注意这里不能写成void f(X c);
}
//把X的definition放在后面是因为其用到了Y,所以这必须要在Y的后面
struct X{
private:
int i;
public:
void initialize();
friend void g(X*, int);
friend void Y::f(X*); //这里使用到了Y的内部结构,故用前向声明不行。
friend struct Z;
friend void h();
}