【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();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?