【问题标题】:c++: Returning objects in functions of another classc ++:在另一个类的函数中返回对象
【发布时间】:2013-11-14 05:29:48
【问题描述】:

我对 c++ 比较陌生,所以我不知道如何实现我的问题。 我将示意性地展示我的问题而不是实际代码,希望这将提供其他用户也可以使用的通用解决方案。

我有:

  • 在标头 A.h 中定义的 A 类(及其正确的 A.cpp)

  • 标头 B.h 中的 B 类(及其正确的 B.cpp)

在这个 B 类中,我有一个函数,它使用 A 的对象 (objA) 作为参数,用它做一些事情,然后返回这个对象。

我应该如何定义该函数,以便 B 类在其函数中识别“类型”objA? 是用指针、模板、...完成的吗?

谢谢! 罗兰

【问题讨论】:

    标签: c++ function class object types


    【解决方案1】:

    有变种:

       // 1) by value
       // in B.h
       #include "A.h"
       class B {
       public:
         A foo(A a);
       };
       // in B.cpp
       A B::foo(A a) { /* a.do_something(); */ return a; }
    
       // 2) by reference
       // in B.h
       #include "A.h"
       class B {
       public:
         void foo(A& a); // can modify a
         void foo(const A& a); // cannot modify a
       };
       // in B.cpp
       void B::foo(A& a) { // a.change_something(); }
       void B::foo(const A& a) { // a.get_something(); }
    
       // 3) by pointer
       // in B.h
       #include "A.h"
       class B {
       public:
         void foo(A* a); // can modify a
         void foo(const A* a); // cannot modify a
       };
       // in B.cpp
       void B::foo(A* a) { // a->change_something(); }
       void B::foo(const A* a) { // a->get_something(); }
    

    【讨论】:

      【解决方案2】:

      你的 headerB.h 应该是#include "headerA.h"。就够了。

      当然,如果你要改变对象的状态,你应该通过指针传递它,比如void MyBMethod(objA* x);

      【讨论】:

      • 如果我有第三节课怎么办,比如 C.cpp。它必须使 A (objA) 的对象比它使用 MyBMethod(objA x) 有什么改变吗?
      • 然后你需要将 A 和 B 的声明(头文件)#include 到 Ch 中(或者如果你喜欢在头文件中使用前向声明来最小化包含,则到 C.cpp)。
      猜你喜欢
      • 2016-02-16
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多