2016-10-04 81 views
-4

在我說什麼之前,我想澄清一下,我是一名初學者程序員,只在C++上花費了大約2個月的時間。C++:我如何從不同的類中減去兩個整數?

我已經有這個問題一段時間了,我似乎無法找到答案!

要說清楚,我並不是想優化這個「遊戲」。我只是試圖練習我的課程。

這裏是例如:

#include <iostream> 

using namespace std; 

int main() { 
    Health = Health - dmgNinja; 
    cout << Health << endl;  
} 

在一個單獨的類標頭:

class Enemy { 
public: 
    void dmgNinja(); 
}; 

在一個單獨的類CPP:

int dmgNinja = 42; 

namespace std { 

void Enemy::dmgNinja() { 
    cout << dmgNinja << endl; 
} 

} 

在一個單獨的類標頭:

class Bandit { 
public: 
    void Health(); 
}; 

在一個單獨的類CPP:

int Health = 100; 

namespace std { 

void Bandit::Health() { 
    cout << Health << endl; 
} 

} 

總之,我想知道如何從不同類別減去兩個變量,然後打印出來的主要文件,並確保任何變量改爲停留改變。

+3

請__don't__爲你自己的東西使用命名空間'std'。這就是標準庫命名空間! – tkausl

+2

請勿將您的代碼封裝在'namespace std {}'使用'std :: cout'和'std :: endl'中。實際上,不要使用'std :: endl'來使用''\ n''。 ';)' – Galik

+2

這將不會編譯,因爲*健康*沒有定義在你的主。你也絕對不應該把你的東西放入命名空間std中。 – wonce

回答

1

下面是一個例子:

class Taco 
{ 
public: 
    int sauce; 
}; 
class Burrito 
{ 
    public: 
    int cheese; 
}; 

int main(void) 
{ 
    Burrito b; 
    Taco t; 
    b.cheese = 5; 
    t.sauce = 3; 
    int difference = 0; 
    // Here's the subtraction 
    difference = b.cheese - t.sauce; 
    return EXIT_SUCCESS; 
} 
+0

這可能是最簡單的方法。 @Pablo你可能擁有的問題不是讓你的變量成爲班級的一部分。 –

+0

非常感謝!我知道這可能是一個愚蠢的問題,但我找不到答案。還有一個問題。我現在得到如何減去類。所以如果我想改變b.cheese爲2.那麼我會做b.cheese = b.cheese - t.sauce? –

+0

如果你想把'b.cheese'改爲2,你可以做'b.cheese = 2;'。把它們當作一個不在結構中的變量來對待它們。 –

0

要回答你的直接問題,你需要在一個頁眉或在您的main.cpp文件中聲明Health作爲extern

儘管如此,您還有其他許多問題,包括使用全局變量,這是非常令人沮喪的。把它作爲學習過程的一部分,併成爲初學者。

順便說一句,你的問題是非常具有誤導性的,因爲你實際上想要做的只是從另一個整數中減去一個整數,並將結果賦給一個操作數。您的代碼中不會使用您的類。

0

我在那裏看到兩個問題。

關於從不同類減去兩個屬性,它主要取決於您打算執行減法的位置。

規則是必須從那裏看到兩個屬性。
因此,它可能是,例如,公共屬性(無處不在),或具有訪問器方法的私有屬性或朋友類的屬性。

所有關於隱私的大驚小怪最初看起來像是一件麻煩事,但這就是讓大量代碼(類似於10.000行或更多)可管理的原因。如果您限制對某個給定值的訪問,只有一小部分代碼可能會對其進行修改,找到錯誤的原因將比在整個項目中檢查錯誤代碼行更容易。
除此之外,聲明變量public或private對編譯器實際生成的代碼沒有影響。這完全是一個保持事物檢查的問題。
這就是爲什麼始終提醒初學者全局變量是錯誤的簡單方法。決定放置數據的位置以及程序的哪些部分將被授權讀取或寫入,這是一項額外的工作。在小的教育例子中,它似乎沒有任何目的。
但是,一旦您編寫了自己的幾百行代碼並在幾個調試會話中出汗,您很快就會意識到它的實用性。現在讓我們假設你需要一小段信念:)。

現在談談「的變數,(即)改爲停留改變」,它基本上是你的變量的壽命的問題。 希望你會有關於這方面的講座。全局變量,局部變量,動態變量。壽命三位一體的壽命。

在你的情況,我不太看到你的問題是什麼。如果你的目標確實是打印一個差異,你甚至不需要一個變量來存儲它。

void print_diff(void) 
{ 
    int a = 5; 
    int b = 3; 

    printf ("%d - %d = %d\n", a, b, a-b); 
} 

這裏只有兩個存儲的值,在變量ab
僅獲取的值,他們。減去並讓printf顯示結果所需要的時間的差a-b存在計算機內。
您可以存儲這種差異在某些局部,全局或動態的變量,甚至將其寫入到磁盤,使其持續只要你的硬盤驅動器並沒有失敗,但會是什麼呢?