Member 14009449 Ответов: 2

Как вызвать функцию одного класса из другого класса в C++


#include <iostream>

using namespace std;

class Enemy {
public:
    void setAttackDamage(int x){
        attackDamage = x;
    }
    
    void setHealth(int y){
        health = y;
    }
    
    void lowerHealth(int z){
        health -= z;
    }
    
    virtual void attack() = 0;
    
protected:
    int attackDamage;
    int health;
    
};

class Ninja : public Enemy {
public:
    void attack(){
        cout << "Ninja attacked with " << attackDamage << " !" << endl;
        Samurai::lowerHealth(attackDamage);
    }
    
};

class Samurai : public Enemy {
public:
    void attack(){
        cout << "Samurai attacked with " << attackDamage << " !" << endl;
        Ninja::lowerHealth(attackDamage);
    }
    
};

int main() {
    
    Ninja n;
    Samurai s;
    
    Enemy *e1 = &n;
    Enemy *e2 = &s;
    
    e1->setAttackDamage(5);
    e1->setHealth(100);
    
    e2->setAttackDamage(6);
    e2->setHealth(90);
    
    
    
    return 0;
    
}


я пытаюсь вызвать полицию.
lowerHealth()
функция другого класса и наоборот .. есть идеи ??

Что я уже пробовал:

я попытался использовать оператор разрешения области видимости, чтобы попытаться вызвать функцию из другого класса, но он думает, что для этого требуется объект, если я не уверен. пожалуйста помогите большое спасибо

2 Ответов

Рейтинг:
20

Rick York

Методы класса могут вызываться только экземпляром класса, либо метод должен быть статическим. Если он статичен, то in не может получить доступ к членам, которым требуется экземпляр объекта, т. е. он может получить доступ только к другим статическим методам и членам, если только у него нет доступа к экземпляру через указатель или глобальную переменную.

Поскольку они имеют один и тот же базовый класс и метод находится в базовом классе, то просто передайте указатель на другой экземпляр. Он должен знать, на кого он нападает, верно?

// I use the p wart to indicate pointer variables.
pe1->attack( pe2 );  // pe1, the ninja is attacking pe2, the samarai


Рейтинг:
0

KarstenK

Вы не поняли классовую концепцию наследования в C++. Функция принадлежит в класс. Читать это руководство чтобы лучше понять его.

class Samurai : public Enemy {
public:
    void attack(){
        cout << "Samurai attacked with " << attackDamage << " !" << endl;
        Enemy::lowerHealth(attackDamage);//call from the right parent (you dont need to write it
    }
};
А в основном вы можете вызывать функции напрямую
int main() {
    
    Ninja n;
    Samurai s;
    
    n.setAttackDamage(5);
    n.setHealth(100);
    
    s.setAttackDamage(6);
    s.setHealth(90);    
    
    return 0;    
}


Member 14009449

привет KarstenK не могли бы вы пожалуйста показать мне, как вы могли бы сделать это :)