gpt4 book ai didi

c++ - 从另一个方法调用非静态成员方法

转载 作者:可可西里 更新时间:2023-11-01 17:38:23 28 4
gpt4 key购买 nike

有没有办法从 C++ 主类中包含的另一个方法调用非静态类成员方法?如果是这样,代码会是什么样子?

问题是,我无法将此特定方法声明为静态方法,因为它使用同一类中的其他方法,如果我将其设为静态方法,这些方法将不起作用。

我正在尝试使用:

MyClass::myClassMethod();

来自主类中的一个方法,但它给了我错误:非静态成员引用必须相对于特定对象。

澄清一下,myClassMethod() 使用 MyClass 中的其他方法,例如:

void myClassMethod() {
...
anotherClassMethod();
}

因此,如果我将 myClassMethod 设为静态,它会干扰调用 anotherClassMethod()。

最佳答案

static 成员函数调用非静态成员函数有什么用?

除了您传递的参数之外,每个非静态成员函数都隐式传递了一个 this 指针,传递的指针随后被取消引用以引用类对象成员 但是 static 函数不通过隐式 this 指针传递,因此不能在静态成员函数内调用任何非静态成员函数,因为没有 this 可以这样做。

解决方案是什么,如果你仍然想这样做?

您将需要一些机制来获取指向静态方法内部对象的指针,然后您可以使用该指针调用成员函数。
怎么做?
您将必须全局存储指向类对象的指针,或者将其作为实例传递给静态方法的函数参数之一。

但是,以上两种方法都是变通方法,这里要注意的重要一点是,如果您觉得需要通过静态成员函数调用非静态成员函数,那么您的设计有问题。


再想想,也许我之前误读了你的问题,可能你的问题是:

如何从main调用一个类的非静态成员函数?

你需要一个类的实例来调用非静态成员函数。
很简单,

MyClass obj; 
obj.myClassMethod();

myClassMethod() 中调用任何其他成员函数将只是:

void myClassMethod()
{
//...
anyOtherMyClassNonStaticMemberFunction();
//...
}

关于c++ - 从另一个方法调用非静态成员方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9713430/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com