gpt4 book ai didi

c++ - C++类中的函数调用

转载 作者:搜寻专家 更新时间:2023-10-31 01:07:52 25 4
gpt4 key购买 nike

我在同一个类(class)

Executive::Executive(std::istream& fin){

std::ifstream dFin(argv[2]);

if(!dFin.is_open()){
std::cout <<"Could not open directives file.";
std::cout <<endl;
}
else{
std::string directive;
dFin >>directive;

int x;
dFin >>x;


if(directive=="print"){

}

和函数

void Executive::print(int i) const{

if(i>MAX_NUM_POLYNOMIALS){
std::cout <<"Sorry, " <<i <<" is not within the known polynomials.";
std::cout <<endl;
}
else{

pNom[i].print(std::cout);
std::cout << i <<'\n';
}

在第一段代码的最后一位,如何从第二段代码调用打印函数?它们在同一个类中,我不想将调用它与第二部分中从另一个类调用的打印函数混淆。

最佳答案

总之在这里直接调用print方法是没有问题的。不过,下面有一些场景可供考虑。

如果您在不同的类中有打印方法,您只需使用 myAnotherClass.print(...)

如果您需要从基类显式调用打印方法,您可以显式使用基类作用域,如底部示例所示,例如 MyBaseClass::print(...)

这是一个简单的情况,除非您在全局范围内有一个打印方法或正在使用一个命名空间,否则您不会有任何冲突。

如果它在全局区域中,你可以用::print(...)调用它,如果它在命名空间中,你可以使用myNamespace::print(...)

不惜一切代价尽量避免“this->”,并将其作为最后的手段。如果您在调用 print 的方法中有一个“打印”参数,那么如果您出于某种原因无法更改参数名称,则可能是一种情况。

最后,在理论课之后,这里是实际示例:

Executive::Executive(std::istream& fin){

std::ifstream dFin(argv[2]);

if(!dFin.is_open()){
std::cout <<"Could not open directives file.";
std::cout <<endl;
}
else{
std::string directive;
dFin >>directive;

int x;
dFin >>x;


if(directive=="print") {
print(x); // calling the method of the current class
MyBaseClass::print(x); // calling the method of the base class
myAnotherClass.print(x); // classing the method of a different class
::print(x); // calling print in the global scope
myNamespace::print(x); // calling the method in a dedicated namespace
}

关于c++ - C++类中的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18777580/

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