deque 라는 클래스를 상속받았을 때, 내부에서 꼭 범위연산자를 써야하는지요?

dltkddyd의 이미지

template<typename PTRTYPE>
class sdeque:public deque<PTRTYPE> {
	//진술
	void repop_back(PTRTYPE value) {
		deque<PTRTYE>::pop_back(value);//여기서 범위 연산자를 쓰지 않으면 컴파일 오류가 발생하네요.
	}
};

deque::
범위 연산자를 매번 호출시 사용하지 않고 호출할 수 있는 방법이 있나요? 이거 너무 불편한데요.

dltkddyd의 이미지

생각해보니, 함수재정의를 위해서라도 저런 식의 방법이 필요하겠네요. 올린 글이 지워지지 않아서 지우지 못했습니다.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

klyx의 이미지

STL의 컨테이너들은 소멸자가 비가상함수입니다. 업캐스팅을 하지 않는게 확실하지 않는한, 가능하면 상속받지 않는게 좋습니다.
당연히 STL컨테이너에 오버라이딩할수있는 함수는 존재하지 않습니다.

그리고 템플릿클래스의 부모 함수를 호출하려면 this->를 이용하면 됩니다.

dltkddyd의 이미지

STL에 없는 것을 추가하려고 했습니다. 그 경우에는 상속받을 수 밖에 없지 않나요?
그리고 비가상함수라면 소멸자에서 부모의 소멸자를 호출하지 않으면 될 뿐 아닐까요?
좀 건방진 질문 드려봅니다.
그런데 오버라이딩이 됩니다. 지금 막 해봤는데.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

만약 repop_back() 이라는 함수만 필요한 경우라면, 단순히 dequq 과 value 를 받는 별도의 template 함수를 작성하는 것이 바람직 할 것 같습니다.
그게 아니라 정말 sdeque 이라는, deque는 is-a 의 관계가 아닌 class가 필요하다면 객체 합성에 의해 구현하는 것이 안전할 겁니다.

template<typename PTRTYPE>
class sdeque
{
public:
  ...
  void repop_back(PTRTYPE value) {
     m_queue.pop_back(value);
  }
  ...
 
private:
  deque<PTRTYPE> m_queue;
};

그리고, STL 컨테이너를 상속 받으면 안 되는 이유나, 비가상 함수를 오버라이딩 하면 안 되는 이유 그리고 public 상속을 해야하는 이유에 대해서는 Effective C++ (3판이 최신이죠) 다음 내용을 참고하시면 도움이 될 겁니다. (C++의 기본 문법에 어느 정도 익숙해진 상태라면, Effective C++ 시리즈의 정독하면 참 좋습니다.)
- 항목 7: 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자
- 항목 32: public 싱속 모형은 반드시 “is-a(...는 ...의 일종이대”를 따르도록 만들자
- 항목 36 상속받은 비가상 함수를 파생 클래스에서 재정의하는 것은 절대 금물!

klyx의 이미지

가상함수가 없기 때문에 오버라이딩은 안됩니다.
오버라이딩은 동적 바인딩에 의한 함수호출을 가리킵니다.
이건 업캐스팅을 해서 함수를 호출해도 여전히 실제 할당된 객체의 함수가 호출되는 동작 방식을 가리키는 용어입니다.

kaeri17의 이미지

STL 클래스를 상속받는 방법은 무척이나 비추천 받는 방식중에 하나입니다. 애초에 C++클래스는 원한다고 상속할수 있는 성질의 것이 아닙니다. 그리고 질문하신건 using을 잘 쓰면 됩니다.

dltkddyd의 이미지

그걸 좀 알려주세요.
클래스 안에서 이렇게요?

using namespace sdeque<PTRTYPE>

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.