2017-01-27 1 views
-3

이 코드는 C++ 11에 쓴 :아무것도 제거하지 않고 "b"를 인쇄 할 수 있도록이 코드에 어떻게 추가 할 수 있습니까?

#include <iostream> 
#include <string> 

using namespace std; 

class A{ 
    public: 
    void print() const { cout << "a" << endl; } 
}; 

void f(const A& a){ 
    a.print(); 
} 

하고 대신 "a"에 상관없이 입력의 문자 "b"를 인쇄 할 것이다, 그래서 나는 그것에 추가하지만 아무것도 제거하지 않음으로써이 코드를 편집 할 . 어떻게 가능합니까? 인터넷에서 답변을 찾지 못했습니까?

+2

"무엇인가 제거 할 수없는 이유"를 설명 할 수 있습니까? 그것의 퍼즐이 CodeGolf가 아니라 Stackoverflow에 있어야합니다. – Borgleader

+0

아니, 퍼즐이 아니에요, 저에게 필요한 것, 주어진 코드를 건드릴 수는 없지만 그것에 추가 할 수 있습니다. – Basilm

+2

예, 퍼즐입니다. 이것은 실제 세계에서 누군가가 직면하게 될 실제 문제가 아닙니다. –

답변

2

사용 백 스페이스 :

cout << "a\bb"; 

백 스페이스 문자 (\b가) 다시 커서를 취 다음 ba 덮어 씁니다.

+0

나는 그것을 시도하고 그것이 작동하지 않았다, 그것은 (일부 altcode) b – Basilm

+0

ID는 디스플레이 환경에 따라 다릅니다. 실제로는 3 문자를 씁니다 –

1

이것은 코드에 추가됩니다. 아무것도 인쇄 'B'를 제거하지 않습니다

#include <iostream> 
#include <string> 

using namespace std; 
class A{ 
public: 
void print() const {cout << "b" << endl; 
    return; 
    cout << "a" << endl ;} 
}; 

void f(const A& a){ 
a.print(); 
} 
0

당신은

이 경고를 방지하기 위해 --- 쉼표

void print() const {cout << ("a", "b") << endl ;} 

--- 편집의 폐기 속성을 사용할 수 있습니다 "쉼표 연산자의 왼쪽 피연산자는 아무 효과가 없습니다."예를 들어, 캐스팅 할 수 있습니다. "a" ~ (void)

void print() const {cout << ((void)"a", "b") << endl ;} 
+0

그 날 컴파일 오류를 보여주는; 쉼표 연산자의 왼쪽 피연산자는 아무 효과가 없습니다. [-Wunused-value] – Basilm

+0

@Basilm - 경고 여야하며 오류가 아니어야합니다. 예, 솔루션은 효과가없는 왼쪽 피연산자를 기반으로합니다. – max66

+0

@Basilm - 경고를 피하기 위해 예제를 추가했습니다 – max66

0

@zmbq가 좋은 해결책을 제시했습니다. 여기 내 걸릴 것입니다. 전달 된 인스턴스 유형 B의 경우

class A{ // could make this class abstract 
public: 
    virtual void print() const { cout << "a" << endl; } 
}; 

class B: public A { 
    void print() const { cout << "b" << endl; } 
}; 

void f(const A& a) { 
    a.print(); 
} 

B b; 
f(b); // it should print 'b' 

기능 f 파생 클래스의 구현 내부 이런 식으로 호출됩니다.

+0

OP는 "입력에 관계 없습니다" – 0x499602D2

+0

하지만이 코드는 B 유형의 매개 변수가 f에 전송 된 경우에만 작동합니다. f (A & a)에 대해 작동해야합니다 – Basilm

+0

맞습니다 - B 형의 객체 만 처리합니다. –

1

네임 스페이스의 랩 클래스. 그런 다음 직접 작성하십시오. 네임 스페이스는 새로운 것입니다. 새 학급도 마찬가지입니다.

namespace unused { 
    class A{ 
    public: 
    void print() const { cout << "a" << endl; } 
    }; 
} 

    class A{ 
    public: 
    void print() const { cout << "b" << endl; } 
    }; 

void f(const A& a){ 
    a.print(); 
} 
관련 문제