温故知新——C++两个相互关联的类

我们都必须意识到,写程序其实是一个心思要细腻的活~

一开始,我的代码大概是这个样子的:

class B;

class A{
public:
  A()
{}
  A(int a) : id(a)
{}
   private:
  B b;
};

class B{
 public:
   B()
{}
  B(int b): num(b)
{}
private:
A a;
};

很显然,我没有能够成功编译~我承认,上面的代码我都没有仔细去想,就写出来了~最近烦心事比较多。

上面的代码,有一个严重的问题是,相互迭代:

如果上面的代码能够成功执行,会发生:

class A中有一个class B的成员,于是,编译器去初始化B,于是进入B中,发现class B有一个A的成员,于是初始化A。。。就这么无穷无尽的初始化下去

还好编译器阻止了这一切~



进一步改进:

class B;

class A{
public:
  A()
{}
  A(int a) : id(a),b(new b())
{

}
   private:
  B* b;
};

class B{
 public:
   B()
{}
  B(int b): num(b)
{}
private:
A a;
};

感觉这样能够解决问题~实际上,你编译上面的代码,会得到:

”A(int a) : id(a),b(new b())“ Error: incomplete type is not allowed

这是什么错误?仔细的回想下代码,我们只声明了class B,没有B的定义。

知道错在哪里就容易修改了,代码就不上了,简单说一下

在类的外部new b(),传入指针给A的构造函数,初始化B* b;

时间: 2024-10-06 04:32:21

温故知新——C++两个相互关联的类的相关文章

属性与内存管理(属性与内存管理都是相互关联的)

<span style="font-size:18px;"> 属性与内存管理(属性与内存管理都是相互关联的)第一部分 一,属性: 属性是OC2.0之后出来的新语法,用来代替setter和getter方法,使用属性可以快速创建setter以及getter方法的声明,setter和getter方法的实现,另外添加了对实例变量操作的安全处理(其安全是通过内存管理实现的) setter 方法作用:为单一的实例变量重新赋值, 规范: (- 号方法)无返回值, 名字以set开头后面加上

iOS开发之多XIB之间相互关联

Xib link Xib 1.直接加载xib中的UIView 创建一个View1.xib, 随便设一个背景色,加一个标识UILabel, 这样好知道是这个view是哪一个view. 你可以在这个view上加作意的subview,我只是说明原理,所以这儿并没有加作何subview. 最终我的View1如下图: 由于View1会放到其它View上作为subview,所以这儿size是Freeform, Status Bar是:None. 将下面代码放到viewDidLoad中: &1这行代码就是加载

两个数组关联起来的函数------绝对自创

作用: 把两个数组关联起来,可以通过第一个数组查到第二个数组中的值,还蛮实用的. 和大家分享下,写了两个小例子. 我是不是棒棒哒?~ 当然如果大家还有更好的方法,欢迎和我分享啦~ 一起共勉吧~ optionsPut:输入数组 optionsGain:输出数组 1>把两个数组对象变成一个Object: //change the quantityOptions will change realizedGainOptions or immediateIncomeOptions. var circleO

Oracle两张表关联批量更新其中一张表的数据

Oracle两张表关联批量更新其中一张表的数据 方法一(推荐): UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXISTS (SELECT 1 FROM 表1 WHERE 表1.A = 表2.A); 尤其注意最后的外层where条件尤为重要,是锁定其批量更新数据的范围. 方法二: MERGE INTO 表2 USING 表1 ON (表2.A = 表1.A) -- 条件是 A 相同 WHEN MATCHED TH

cxf,两个声明导致 ObjectFactory 类中发生冲突 java

说明先,这里无论是客户端还是服务器端都是用java语言编写,如有写得不好,望原谅! 问题 http://localhost:8080/WEB-SMVC/cxf/userService?wsdl [17,7]:  两个声明导致 ObjectFactory 类中发生冲突. http://localhost:8080/WEB-SMVC/cxf/userService?wsdl [20,7]: (与上一错误有关) 这 是另一个声明. wsdl2java: wsdl2java   http://local

两幅图说明python类中self的含义

总结:self是对于对象自身的引用.这里的圆括号里的self也可以换成其它你想要的任意名称,只是self更形象和通用些. 两幅图说明python类中self的含义

oracle 如何快速删除两表非关联数据(脏数据)?

1.情景展示 现在有两者表,表1中的主键id字段和表2的index_id相对应.如何删除两表非关联数据? 2.解决方案 --第1步 delete from VIRTUAL_CARD t where t.index_id not in (select id from PRIMARY_INDEX); --第2步 delete from PRIMARY_INDEX t where t.id not in (select index_id from VIRTUAL_CARD); 说明:in()函数里面最

解决 mybatis 中相互关联的两种表数据在返回前端时一直循环查询,直到StackOverFlow报错

原代码设计: 一个用户有多个账户,是一对多的关系,用Collection集合关联:一个账户独属于一个用户,是一对一的关系,用association来关联: UserMapper.xml <mapper namespace="com.xuetu.springboot.mapper.UserMapper"> <!-- 定义User的resultMap--> <resultMap id="userMap" type="user&qu

excel两个下拉框相互关联

我有两列数据,录入了所有人的信息,一个是姓名,一个是编号 现在我想再做两个下拉框,一个是选择姓名的,一个是选择编号的,我希望我选择姓名后,编号自动对应到这个人的,如果我选择编号,那么姓名也自动对应过来.请教各位excel的达人们. 这个用VLOOKUP函数做更方便 假设是在A列写入了姓名,B列写入了编号 在C2单元格设置了下拉菜单可以选择姓名, 则在D2单元格写入公式 =VLOOKUP(C2,A:B,2,) 原文 http://zhidao.baidu.com/question/14945914