Доступ к другой переменной класса через Functon в C ++

0

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

File : myheader.h

class A {
public:
int x;
};


class B:public A
{
public:
void Print(void)
  {
    A::x=0;
  }
};

хорошо, и в основном...

#include <iostream>
#include "myheader.h"

using namespace std;

A mya;
B myb;

int main(){
mya.x=10;
cout<<mya.x<<endl; //That will print 10
myb.Print();
cout<<mya.x<<endl; //That will print also 10, i want it to print 0
return 0;
}

Это печатает 10 и 10. Я хочу иметь доступ к переменной x в классе A через функцию из класса B. Я не могу найти что-то, что работает...

  • 0
    mya - это объект с x, назовем его x1, myb - это другой объект с x, назовем его x2, когда вы вызываете mya.x = 10 это означает, что x1 = 10 когда вы вызываете myb.print() это означает, что x2 = 0, когда вы вызов cout << mya.x << endl; это означает печать х1.
Теги:
class
variables

1 ответ

3
Лучший ответ

В своем коде, mya и myb являются отдельными экземплярами. Два совершенно разных объекта.

myb.Print() изменяет значение x на myb объекта (myb.x), но не делает ничего общего mya. Попробуйте распечатать myb.x с последней строкой cout:

cout << myb.x << endl;

------ EDIT (в ответ на ваш комментарий) ------

Рассмотрим следующий код.

Способ иметь экземпляр B (в данном случае Cat) работать с экземпляром A (в данном случае Animal) заключается в передаче ссылки на экземпляр A на экземпляр B (tom.eats( jerry );),

В этом примере экземплярами являются tom, jerry и spike. Подобно вашему mya и myb.

class Animal {

public:

    Animal() { _alive = true; }

    bool isAlive() { return _alive; }                   // getter
    void setAlive( bool value ) { _alive = value; }     // setter

    bool _alive;

};

class Cat : public Animal {

public:

    void eats( Animal &animal ) {
        animal.setAlive( false );
    }

};

class Mouse : public Animal { };


int main( int argc, char **argv ) {
    Cat             tom;
    Mouse           jerry;
    Animal          spike;              // a dog, but could be any animal

    cout << tom.isAlive() << endl;      // true, the cat named "tom" is alive
    cout << jerry.isAlive() << endl;    // true, the mouse named "jerry" is alive
    cout << spike.isAlive() << endl;    // true, the dog named "spike" is alive

    tom.eats( jerry );                  // the cat eats the mouse.  so sad.
                                        // the cat can do this because Mouse is also an Animal

    cout << tom.isAlive() << endl;      // true, the cat named "tom" is alive
    cout << jerry.isAlive() << endl;    // false, the mouse named "jerry" is not alive
    cout << spike.isAlive() << endl;    // true, the dog named "spike" is alive

    tom.eats( spike );                  // the cat eats the dog. impressive.
                                        // the cat can do this because spike is an Animal

    cout << tom.isAlive() << endl;      // true, the cat named "tom" is alive
    cout << jerry.isAlive() << endl;    // false, the mouse named "jerry" is not alive
    cout << spike.isAlive() << endl;    // false, the dog named "spike" is not alive

    tom.eats( tom );                    // the cat eats itself.  this cat is really hungry. 
                                        // the cat can do this because Cat is an Animal

    cout << tom.isAlive() << endl;      // false, the cat named "tom" is not alive
    cout << jerry.isAlive() << endl;    // false, the mouse named "jerry" is not alive
    cout << spike.isAlive() << endl;    // false, the dog named "spike" is not alive

    spike.eats( tom );                  // error, Animal class has no eats() method so
                                        // this won't compile
}
  • 0
    Да, я вижу, что моя цель состоит в том, чтобы иметь функцию в классе B, чтобы при создании объекта класса B (например, myb) я мог вызывать функцию и иметь доступ к переменной x, которая будет в объекте mya класса А. Как я могу это сделать ??
  • 0
    хахаха хороший пример .. я понял это, спасибо большое, ты рассмешил меня и ответил на мой вопрос !! еще раз спасибо ..
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню