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对象的方法时完成。
我想知道如何从另一个 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对象的方法时完成。