如何从另一个类访问一个类的方法/变量,而不在c++中实例化它或子类

how can I access the methode/variable of one class from another class without instantiating it or subclass in c++?

本文关键字:变量 c++ 子类 实例化 方法 访问 另一个 一个      更新时间:2023-10-16

我试图将一个类的引用传递给另一个类,这似乎相当复杂,因为我必须编辑该类所涉及的所有文件。

我试图将变量设置为静态成员,但看起来很难看。

我可以将另一个类划分为子类。但是,除了子类化之外,还有其他方法吗?

class A
{
func1(){};
};
class B
{
func3()
{
    //how can I call func 1 without instantiating class A and subclass A?
};
};

如何从另一个类访问一个类的方法/变量,而不在c++中实例化它或子类?

如果方法/变量是非静态的,则不能"从[anywhere]访问[a]类的方法/变量而不实例化它"。

非静态成员变量包含在实例中。没有类的实例,就没有成员变量的实例。如果不实例化类,就没有实例。因此,必须实例化一个对象才能访问该实例的成员变量。

同样,非静态成员函数只能在实例上调用。没有实例,就无法调用成员函数。如果不实例化类,就没有实例。因此,必须实例化一个对象,才能访问非静态成员函数。

请注意,当您实例化继承另一个类的类时,您还实例化了基类子对象。因此,即使通过子类,也无法避免实例化对象。

静态成员函数和变量可以在没有类实例的情况下使用,就像自由函数和全局变量一样。当然,就像自由函数一样,静态成员函数不能通过this指针访问实例的非静态成员,因为它们与任何实例都没有关联。

您可以在A类中定义朋友类B

using namespace std;
class B;
class A{
 private: 
  static void myfunc()
  {
    cout << "Hello";

  }
 friend class B;
};
class B {
 public:
  void hellofromA() {
    A:: myfunc();
  }
}; 
int main(int argc, char** argv){
  B x;
  x.hellofromA();
}

它涉及到使其全局或静态,通过friend类,您可以使该函数对其他类隐藏

假设可以在没有class A对象的情况下调用func1(如果我理解正确的话,这就是你想要的),那么最好这样构造代码:

void func1(){};
class A {
    void callFunc1() { func1(); }
};
class B {
    void func3() { func1(); }
};

然而,如果假设不正确,并且func1需要是class A的成员函数,那么没有实例就无法调用它。

在创建类时,如果不告诉类中的函数是公共、私有或受保护的。。。c++会将它们设置为私有。

你应该做这样的东西:

    class myFirstClass {
    public:
        void function1();
    };
    class mySecondClass {
    public:
        myFirstClass A ;          // Create the object.
        A.function1();            // Now you can use this function.
        void function3();
    };