2017-10-31 17 views
-1

に派生クラスに基本クラスから結果を得ることができ、我々は2つの数の減算を格納するクラスBに2つの数の追加を保存するクラスA内の変数z、および変数wを持っている、と我々は派生クラスDを作成すると - zwに保存されているこれらの値を派生クラスDに持たせることで、これらの数値を掛けることができますか?は、我々は、継承

コードは次のようになります:あなたはおそらく何かしたい

#include <iostream> 

using namespace std; 

class c1 
{ 
    int x, y; 

public: 
    void getdata1(int a, int b) 
    { 
     x = a; 
     y = b; 
    } 

    void add1() 
    { 
     int z = x + y; 
     cout << "the sum is " << z << endl; 
    } 
}; 

class c2 
{ 
    int x, y; 

public: 
    void getdata2(int a, int b) 
    { 
     x = a; 
     y = b; 
    } 

    void sub1() 
    { 
     int w = x - y; 
     cout << "the sum is " << w << endl; 
    } 

}; 

class D: public c1, public c2 
{ 
///////////////////////////////////////////////////////////////////////////////////// 
public: 
    void display() 
    { 
     cout << "the product is s" << z + w; // something like this 
    } 
}; 
/////////////////////////////////////////////////////////////////////////////////////// 

int main() 
{ 
    D obj1; 

    obj1.getdata1(10, 5); 
    obj1.getdata2(10, 5); 
    obj1.add1(); 
    obj1.sub1(); 
    obj1.display(); 

    return 0; 
} 
+2

あなたのコードを適切に書式設定してください。また、実際に**データを設定する 'getdata()'メソッドを記述しないでください。 –

+3

'z'と' w'はクラス 'c1'と' c2'のデータメンバーではありません。それらはそれぞれの関数の局所変数です。 'D'で' z'と 'w'を継承したい場合は、それぞれのクラスのpublic/protectedメンバーとして宣言する必要があります。 –

+1

ところで:この例は、データメンバーが何のために作られたのか、またどのような方法が良いのかを完全に誤解しているように見えます。また、複数のデータメンバーが1つのインスタンスで複数の「オブジェクト」を表しているので、OOPデザインはここでは見ることができません。 – Klaus

答えて

1

#include <iostream> 

class c1 
{ 
    int x,y; 
public: 
    c1(int a, int b) : x(a), y(b) {} 

    int sum() const { return x + y; } 
}; 

class c2 
{ 
    int x,y; 
public: 
    c2(int a, int b) : x(a), y(b) {} 

    int sub() const { return x - y; } 
}; 

class D: public c1, public c2 
{ 
public: 
    D(int a, int b) : c1(a, b), c2(a, b) {} 

    int foo() const { return sum() * sub(); } 
}; 

int main(){ 
    D obj(10, 5); 

    std::cout << "the sum is " << obj.sum() << std::endl; 
    std::cout << "the sub is " << obj.sub() << std::endl; 
    std::cout << "the product is " << obj.foo() << std::endl; 
} 
+0

このプログラムは私が望む出力を与えます。 –

+0

しかし、どのようにして** c1(int a、int b):x(a)、y(b){} **仕事 –

+0

[initializer_list](http://en.cppreference.com/w/cpp/ language/initializer_list) – Jarod42

-1

まず第一に、質問のフォーマットで作業しようとすると、ここで私はあなたがしたいことをここ仮定しますそれら2つの変数(zとw)の乗算のためのコード。

#include using namespace std; 
int x,y,z,w; 
class c1{ 
    int x,y; 
public:void getdata1(int a, int b){ 
     x=a; 
     y=b; 
    } 
    void add1() 
    { 
     int z=x+y; 
     cout<<"the sum is "<<z<<endl; 
     return z ; 
    } 
} 

class c2 { 
int x,y; 
public:void getdata2(int a, int b){ 
     x=a; 
     y=b; 
    } 
    void sub1() 
    { 
     int w=x-y; 
     cout<<"the sum is "<<w<<endl; 
     return w ; 
    } 

} 
class D: public c1,public c2 
{ 
public:void multiply(int a, int b) 
{ 
    cout<<"the multiplication is "<<z*w<<endl; 
} 
public static int main(){ 

    D obj1; 
    obj1.getdata1(10,5); 
    obj1.getdata2(10,5); 
    int a = obj1.add1(); 
    int b = obj1.sub1(); 
    obj1.display(); 
    obj1.multiply(a,b) 
    return 0; 
} 

これは期待していた解決策です。

+0

関数の戻り値の型(add1とsub1)がint –

+0

の場合に機能しますが、問題文ごとに任意のデータ型を使用できます。データのサイズが不明な場合は、long intを使用してください。 –