2017-10-31 11 views
-1
우리는 우리가 파생 클래스를 변수 두 숫자, 그리고 두 숫자의 뺄셈을 저장하는 클래스 B의 변수 w의 추가 저장 클래스 A에서 z 및 가정 해 보겠습니다 생성 한

상속에서 파생 된 클래스에 기본 클래스에서 결과를 얻을 수 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

BTW :이 예제는 데이터 멤버가 만들어 졌는지, 그리고 어떤 방법이 좋은지 오해 한 것처럼 보입니다. 또한 여러 데이터 멤버가 하나의 인스턴스에서 여러 "개체"를 나타 내기 때문에 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

먼저 질문의 형식에서 작동하도록 시도는 여기에 내가 원하는 것을 가정한다 이 두 변수 (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를 사용하십시오. –