你如何在C ++中有效地使用类中的方法?

时间:2011-12-07 19:06:50

标签: c++

我正在完成一项家庭作业,其中包括编写程序以使用ASCII字符绘制形状并在屏幕上移动它们。在这个例子中,我试图编写一个方法来移动已经绘制的圆。我知道我的drawCircle方法有效,但是当我尝试在drawCircle方法中调用moveCircle方法时,它不会打印任何内容。

void CircleType::drawCircle() const{
    for (int i = 0; i < NUMBER_OF_ROWS; i++) {
        for(int j = 0; j < NUMBER_OF_COLUMNS; j++) {
            int p = abs (x - j);
            int q = abs (y - i);
            int distance =  pow(p, 2) + pow(q, 2);
            int realDistance = pow(radius, 2);
            if (abs(realDistance - distance) <= 3){ // I tested out several values here, but 3 was the integer value that consistently produced a good looking circle
                drawSpace[i][j] = symbol;
            }
        }
    }
    displayShape();
    return;
}




bool CircleType::moveCircle(int p, int q){
    if (p - radius < 0 || p + radius > NUMBER_OF_COLUMNS){
        cout << "That will move the circle off the screen"<< endl;
        return false;
    }
    else if (q - radius < 0 || q + radius > NUMBER_OF_ROWS){
        cout << "That will move the circle off the screen"<< endl;
        return false;
    }
    else{
        x = p;
        y = q;
        for (int m = 0; m < NUMBER_OF_ROWS; m++){
            for(int n = 0; n < NUMBER_OF_COLUMNS; n++){
                if (drawSpace[m][n] == symbol)
                    drawSpace[m][n] = ' ';
            }
        }
        void drawCircle();
        return true;
    }

}

drawSpace是一个2D字符数组,用于保存形状的ASCII字符,displayShape是打印出该2D数组的函数。如上所述,drawCircle函数有效,但moveCircle方法不起作用。当我尝试在drawCircle中使用moveCircle方法时,我是否将{{1}}方法调用错误。

1 个答案:

答案 0 :(得分:6)

void drawCircle();

这不是函数调用;它是一个函数原型声明。要调用该函数,只需使用

drawCircle();

函数原型只是告诉编译器存在具有特定签名的函数。这允许你做这样的事情(尽管这样做并不常见)。

int main() {
    void Foo();
    Foo();
}

void Foo { /* whatever */ }

如果省略原型,编译器会抛出错误,因为Foo在使用之前未声明。在一个类似的(也是更常见的)静脉中你也可以这样做(称为前向声明)。

void Foo();

int main() {
    Foo();
}

void Foo { /* whatever */ }

或者只是先声明它,但在main之前通常不需要大量的功能。

void Foo { /* whatever */ }

int main() {
    Foo();
}