在类中调用类

Posted

技术标签:

【中文标题】在类中调用类【英文标题】:Calling a class inside a class 【发布时间】:2009-05-18 08:55:58 【问题描述】:

我正在尝试编写一个类,当被问到时,它会调用一个类并使其成为类成员。这是我的意思的一个简单示例:

class foo
  myClass Class;
  foo(); 
;
foo::foo()

  //Create the class and set it as the foo::Class variable

我确信这实际上是一件容易的事。任何帮助,将不胜感激 谢谢

编辑:抱歉,术语不好。我将尝试更简洁地介绍我想做的事情。我正在创建一个类 (foo),它有一个具有 (myClass) 类定义的变量 (Class)。我需要创建一个myClass 对象并将其分配给Class,在类foo 中。在大家的帮助下,我算是做到了这一点。

我现在的问题是,我创建的对象在 myClass 的第一行给了我一个“未处理的异常”...“访问冲突读取位置 0x000000c0”我正在尝试执行的 em> 的功能。 感谢您的帮助!

注意:我目前正在使用 emg-2 的解决方案。

【问题讨论】:

请描述更多你想对另一个班级做什么 调用类函数并改变变量。 请注意这个术语。您在编码时创建类。您在执行时创建对象。 是的,抱歉,我对术语比较陌生。 【参考方案1】:

没有必要做任何事情。假设 myClass 有一个默认构造函数,它将用于为您构造 Class(您可以在这里使用更好的名称,您知道)实例。如果您需要将参数传递给构造函数,请使用初始化列表:

foo :: foo() : Class( "data" ) 

【讨论】:

是的,这可能是他真正打算做的:) 作曲。【参考方案2】:

我不确定我是否正确理解了这个问题。但是,如果您尝试按需创建 对象,则可以执行以下操作:

class foo
  myClass* m_pClass;
  foo();
  myClass* f();
  ~foo();
;

foo::foo() : m_pClass(NULL) //Initialize the pointer to NULL do not create any object in the constructor



foo::~foo()

  //Release the allocated object
  delete m_pClass;
  m_pClass = NULL;


myClass* foo::f()

  //Create a new object and return
  m_pClass = new myClass;
  return m_pClass;

【讨论】:

使用 auto_ptr 会更好,从 foo::f() 返回引用也会更好。通过尽可能避免裸指针,代码变得更加简洁,令人惊讶。【参考方案3】:

如果您只想合成,请使用 Neil 解决方案。如果你想要一个聚合(即你将外部对象分配给 myClass*Class),你应该使用一个指针:

class foo
  myClass * Class;
  void createClass(); 
;
// can't use name foo, because its a name reserved for a constructor
void foo::createClass() 
  Class = new myClass();

【讨论】:

我这样做了,它编译了,但是当类更改成员变量时出现运行时错误。 @Sam:看起来错误出在其他地方,而不是用于在类中存储类的技术。 这是可能的,但通常应该复制新对象并覆盖旧对象。 让我更清楚地解释我的意思:) 如果我运行 Class->doSomething();在 foo::createClass 内部并在该函数上给你一个错误,在它做的第一件事上,你认为什么会导致这样的问题? (或者我做错了什么?)我当前的代码正在使用您的解决方案。谢谢 听起来成员函数 doSomething 被一个无效对象调用了。在这种情况下,您将拥有一个垃圾 this 指针,并且您会期望它第一次尝试访问任何成员数据或调用虚函数时会崩溃。你是在创建对象之前调用函数吗?

以上是关于在类中调用类的主要内容,如果未能解决你的问题,请参考以下文章

C++ main 可以在类中并调用派生类吗? [复制]

Grails / Spock:如何在类中模拟从类本身调用方法的单个方法?

能定义在类中的内容

Tkinter - 在类中使用Button命令从另一个类调用函数

如何在类中调用函数?

瞎比记着的东西