乌海做网站网站开发服务费入什么科目
news/
2025/9/24 14:39:03/
文章来源:
乌海做网站,网站开发服务费入什么科目,长沙外贸建站哪里好,惠州网站小程序建设点我们知道C的类应当是先定义#xff0c;然后使用。但在处理相对复杂的问题、考虑类的组合时#xff0c;很可能遇到俩个类相互引用的情况#xff0c;这种情况称为循环依赖。
例如#xff1a;
class A
{
public:void f(B b);//以B类对象b为形参的成员函数//这里编译错位的类应当是先定义然后使用。但在处理相对复杂的问题、考虑类的组合时很可能遇到俩个类相互引用的情况这种情况称为循环依赖。
例如
class A
{
public:void f(B b);//以B类对象b为形参的成员函数//这里编译错位因为B为为止符号
};class B
{
public:void g(A a);
};
这里类A的公有成员函数f的形参是类B的对象同时类B的公有成员函数g也以类A的对象为形参。由于在使用一个类之前必须首先定义该类因此无论将哪一个类的定义放在前面都会引起编译错误。结局这个问题的方法就是使用前向引用声明。前向引用声明是在引用未定义的类之前将该类的名字告诉编译器试编译器知道那是一个类名。这样当程序中使用这个类名时编译器就不会认为是错误而类的完整定义可以在程序的其他地方。在上述程序加上下面的前向引用声明问题就解决了。
class B; //前向引用声明
class A//A类的定义
{
public://外部接口void f(B b);//以B类对象b为形参的成员函数};class B//B类的定义
{
public://外部接口void g(A a);//以A类对象a为形参的成员函数
}; 使用前向引用声明虽然可以解决一些问题但它并不是万能的。需要注意的是尽管使用了前向引用声明但是在提供一个完整的类声明之前不能定义该类的对象也不能在内联成员函数中使用该类的对象。请看下面的程序段
class Fred; //前向引用声明
class Barney
{Fred x; //错误类Fred的声明尚不完善
};
class Fred
{Barney y;
}; 编译出错的原因是对此类Fred的前向引用声明只能说明Fred是一个类名而不能给出该类的完整定义因此在类Barney中不能定义类Fred的数据成员。 再看下面这一段程序
class Fred; //前向引用声明class Barney
{
public:void method(){x-yabbaDabbaDo(); //错误Fred类的对象在定义之前被使用}
private:Fred* x; //正确经过前向引用声明可以声明Fred类的对象指针
};class Fred
{
public:void yabbaDabbaDo();
private:Barney* y;
};
出错原因类Barney的内联函数中使用了由x所指向、Fred类的对象而此时Fred类尚未完整地定义。
应该记住当你使用前向引用声明时你只能使用被声明的符号而不能涉及类的任何细节。 C的类可以进行前向声明。但是仅仅进行前向声明而没有定义的类是不完整的这样的类只能用于定义指针、引用、以及用于函数形参的指针和引用。 而不能定义对象(因为此时编译器只知道这是个类还不知道这个类的大小有多大)也不能访问类的对象任何形式的访问都不允许(因为此时根本不知道有些什么成员)。等到类正式定义以后就可以以各种方式使用该类了。 转载自https://www.cnblogs.com/wkfvawl/p/10801725.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915826.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!