2

在我的同一个班级里

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';
}

}

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

4

3 回答 3

3

总之,这里直接调用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
    }
于 2013-09-13T03:29:05.090 回答
1

如果您想绝对确定您正在调用自己的函数,则可以使用this关键字(如果它不是静态函数)或类名(如果它是静态的)。

this->print(...);或者Executive::print(...);

于 2013-09-13T03:02:07.970 回答
0

您可以完全限定要调用的成员函数:

Executive::Executive(std::istream& fin)
{
  // ...
  if(directive == "print")
  {
    Executive::print(x);
  }
  // ...
}

我应该注意,如果您将非静态print方法添加到另一个不同的类,则此处不会发生名称冲突。那是因为要从其包含的类之外实际调用该方法,您必须引用某个实例来调用它。

于 2013-09-13T03:01:16.323 回答