struct & class 以及前向声明

发布时间 2023-11-17 22:14:26作者: ichprobiere

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();

}