2017-11-22 1 views
-2

두 개의 오브젝트를 비교하고 템플릿을 사용하여 두 개의 오브젝트를 비교하고 싶습니다. 객체를 인수로 전달하는 것은 아래 코드처럼 작동하지 않습니다. 아래 샘플 코드를 참조하십시오. 그게 내가하려는 일이야.템플릿을 사용하여 두 개체를 비교하는 방법은 무엇입니까?

#include <iostream> 
using namespace std; 

template <class T> 
class max 
{ 
    T a; 
    public: 
     max(T a) 
     { 
      this.a = a; 
     } 
     T Large(T n2) 
     { 
      return (a > n2.a) ? a : n2.a; 
     } 
}; 

int main() 
{ 
    max <int> obj1(10); 
    max <int> obj2(20); 
    cout<<obj1.Large(obj2)<<" is larger"<<endl; 
    return 0; 
} 

저는이 작업을 2 개의 개체를 비교하여 수행합니다.

// class templates 
#include <iostream> 
using namespace std; 

template <class T> 
class mypair { 
    T a, b; 
    public: 
     mypair (T first, T second) 
      {a=first; b=second;} 
     T getmax(); 
}; 

template <class T> 
T mypair<T>::getmax() 
{ 
    T retval; 
    retval = a>b? a : b; 
    return retval; 
} 

int main() { 
    mypair <int> myobject (100, 75); 
    cout << myobject.getmax(); 
    return 0;  
} 
+1

이해야하지 파라미터의를 '최대'를 입력 하시겠습니까? – songyuanyao

+0

이미 객체를 전달 중입니다. –

+0

당신은 무엇을하려고하십니까? 귀하의 코드는 말이되지 않습니다. – Omnifarious

답변

0

이 코드는 잘 작동하는 것 같다, 내가이 있는지 알고하자

#include <iostream> 
using namespace std; 

template <class T> 
class Maxi { 
      T a; 
      public: 
        Maxi(T val) 
        { 
         this->a = val; 
        } 
        T Large(maxi n2) 
        { 
         return (a > n2.a) ? a : n2.a; 
        } 
      }; 

int main() { 
       Maxi <int> obj_1(10); 
       Maxi <int> obj_2(20); 
       cout<<obj_1.Large(obj_2)<<" is larger"<<endl; 
       return 0; 
      } 
0

나는이 작업을 수행하려는 생각 : 당신이 그것을 할 방법

template <typename T> 
T max(const T &a, const T &b) 
{ return (b < a) ? a : b; } 

있다고. 당신의 이상한 속임수는 전혀 이해가되지 않습니다. 그리고 만약 당신이 잘못하려는 것을 얻었 으면 자신을 더 잘 설명하십시오.

템플릿은 알고있는 클래스 일 필요는 없습니다. 템플릿 기능을 사용할 수 있습니다. 당신이 절대적으로 클래스를 사용해야하는 경우

, 다음을 수행하십시오

template <typename T> 
class max 
{ 
    T operator()(const T &a, const T &b) { return (b < a) ? a : b; } 
}; 

int main() 
{ 
    max<int> foo; 
    cout << foo(10, 20) << " is larger\n"; // Don't use endl most of the time. 
    return 0; 
} 

당신이 무엇을해야합니까, 당신의 int없는 두 객체가 있다고 가정? 당신이 operator <을 정의해야하지 않으려면

#include <iostream> 
#include <algorithm> 

struct A { 
    int v1; 
    int v2; 
}; 

bool operator <(A &a, A &b) 
{ 
    return (a.v1 < b.v1) || ((a.v1 == b.v1) && (a.v2 < b.v2)); 
} 

::std::ostream &operator <<(::std::ostream &os, const A &a) 
{ 
    os << "{" << a.v1 << ", " << a.v2 << "}"; 
} 

int main() 
{ 
    A first{10, 20}; 
    B second{20, 10}; 
    ::std::cout << ::std::max(first, second) << " is the larger.\n"; 
} 

는, 다음을 수행하십시오 : 글쎄, 당신이 할

bool my_less_than(const A &a, const A &b) 
{ 
    return (a.v1 < b.v1) || ((a.v1 == b.v1) && (a.v2 < b.v2)); 
} 

int main() 
{ 
    A first{10, 20}; 
    B second{20, 10}; 
    ::std::cout << ::std::max(first, second, my_less_than) << " is the larger.\n"; 
} 
+0

개체를 사용하는 클래스의 도움을 받아도 동일한 작업을 수행하고 있습니다. –

+0

@NishantSikri - 수업에서 당신을 위해 무엇을 기대합니까? 아무도 수업을 사용하고 싶지 않다는 것을 알 수있는 이유가 없습니다. – Omnifarious

+0

@NishantSikri - 저기, 클래스 인 버전을 만들었습니다. – Omnifarious

0

이미 최대 및 알고리즘에 따라 제공 분 템플릿 기능이 있습니다. std::max(10, 20)으로 전화하면 더 큰 값을 얻을 수 있습니다.

맞춤 비교를 위해 나만의 비교 기능을 제공 할 수도 있습니다.

사이드 노트 : iostream을 포함하는 것처럼 보이지만 알고리즘없이 max 및 min을 사용할 수 있습니다.

0

문제는 내가 참조 :

  1. 사용

    using namespace std; 
    

    std::max 간접적 믹스에 들어갔습니다 도착하기 때문에 아마 당신을 위해 엉망 일을 할 것이다. 그것은 g++으로 나를 위해 않습니다. 사용하지 마십시오. 다음 줄에

  2. 구문 오류 : 필요

    this.a = a; 
    

    this->a = a; 
    
  3. 인수 Large에 요구 될 수있는 유형 max하지 T이 될 수 있습니다.

    좋은 측정을 위해, 나는 또한 const 회원 기능을 만들 것입니다. using namespace std; 이후

    T Large(max n2) const 
    { 
        return (a > n2.a) ? a : n2.a; 
    } 
    
  4. 사용 std::cout

    std::endl는 문제가있다.


다음

위의 수정과 코드의 업데이트 버전입니다 :

그것은 나를 위해 작동 다음과 같은 출력을 생성
#include <iostream> 

template <class T> 
class max 
{ 
    private: 
     T a; 
    public: 
     max(T a) 
     { 
     this->a = a; 
     } 

     T Large(max n2) const 
     { 
     return (a > n2.a) ? a : n2.a; 
     } 
}; 

int main() 
{ 
    max <int> obj1(10); 
    max <int> obj2(20); 

    std::cout << obj1.Large(obj2) << " is larger"<<std::endl; 
    return 0; 
} 

:

20 is larger 
관련 문제