c ++从其他文件访问主要对象

c++ access main objects from other file

我想知道如何从另一个 class.

访问在 main 函数中创建的对象

main.cpp

#include"ClassA.h";
#include"ClassB.h";

int main()
{

  ClassA objectA;

  return 0;
}

ClassA.h

#pragma once

class ClassA
{
  public:
  ClassA():_privateVar(100)
  {};
  ~ClassA()
  {};

  //Getters
  float getPrivateVarA(){ return _privateVarA; };

  //Setters
  void setPrivateVarA(float privateVarA){ _privateVarA = privateVarA; };

private:

  //Just a value
  float _privateVarA;

 };

ClassB.h

#pragma once

class ClassB
{
  public:
  ClassB():_privateVarB(50)
  { };
  ~ClassB()
  { };

  //This is what i´m trying to achieve: Acces objectA
  // like this:  objectA.getPrivateVarA(); or objectA.setPrivateVarA; 

  int getPrivateVarB(){return _privateVarB;};


private:
  int _privateVarB;
};

我整个星期都在寻找这个问题的答案,但一无所获... 如果有人知道一些书或有任何关于如何到达那里的信息,将不胜感激。

谢谢。

objectA 在 main() 中具有函数局部作用域。根据定义,对象只能在其可见范围内被直接访问。这就是 C++ 的意义所在。

当然,如果您将对此对象的引用或指针传递给其他函数,则其他函数可以通过指针或引用间接访问实例化对象。

我不能 100% 肯定地说你不能,但你绝对应该 那样做。如果你想使用在不同范围内创建的对象,那么你需要将它传递到你想要通过值、引用或指针访问它的范围。

第一Class答:

class A {
public:
    ClassA() : _privateVar(100) {}
    ~ClassA() {}
    float getPrivateVarA() { return _privateVar; }
    void setPrivateVarA(float val) { _privateVar = val; }
private:
    float _privateVar;
};

第一个Class乙:

class B {
public:
    ClassB() : _privateVar(50) {}
    ~ClassB() {}
    // by copy
    float getPrivateVarB_byCopy(ClassA a) {
        return _privateVar + a.getPrivateVarA();
    }
    // by reference
    float getPrivateVarB_byRef(ClassA &a) {
        return _privateVar + a.getPrivateVarA();
    }
    // by pointer
    float getPrivateVarB_byPointer(ClassA *a) {
        return _privateVar + a->getPrivateVarA();
    }
    float setPrivateVarB(float val) { _privateVar = val; }
private:
    float _privateVar;
};

现在是主要内容。

int main(void) {
    ClassB b;
    ClassA a; // for copy and ref
    ClassA *a2 = new ClassA(); // for pointer

    b.getPrivateVarB_byCopy(a); // => 150
    b.getPrivateVarB_byRef(a); // => 150
    b.getPrivateVarB_byPointer(a2); // => 150

    delete a2; // clean up pointer

    return 0;
}

虽然您的示例这种访问类型确实不是一个好主意,但不确定您为什么要以这种方式做事。

您将问题放在了 ClassB 声明的中间。你不能在那里执行代码。无论您做什么,都必须在函数内完成。

可以定义 ClassB 中的函数,使其接受指向 ClassA 的引用或指针。然后该引用可用于调用 getPrivateVarA()。

换句话说,如果 class B 需要访问 class A ,那么由您的代码使用所需的引用来初始化 B。这可以在创建B对象时完成,也可以在调用B对象的方法时完成。