2013-11-25 3 views
1

using 키워드가 필요할 때 실제로 이해가되지 않습니다. 기본 클래스의 함수 나 객체를 사용하려면 항상 필요합니까? 나는 함수를 오버로딩하지 않을 때에도 사용해야한다고 본다.기본 클래스의 기본 동작에`using` 키워드가 사용되었습니다

+3

네임 스페이스에 대해 알아야합니다. – SLaks

+1

@SLaks OP 질문에 [네임 스페이스와 아무 관계가 없습니다.] (http://en.cppreference.com/w/cpp/language/using_declaration) – Mgetz

답변

2

using을 클래스에 사용해야하는 경우는 두 가지입니다. 첫 번째는 기본 클래스에서와 같은 이름으로 클래스의 함수를 정의 할 때 두 함수 모두를 고려하여 오버로드를 사용하려는 경우입니다. 다른 하나는 기본 클래스 생성자를 파생 생성자로 사용하려는 경우입니다. 당신이 기본 클래스를 볼 수 과부하 만들고 싶어 파생 클래스 에서 해당 이름을 과부하 때

+0

기본 클래스가 템플릿 인 경우이 규칙과 다른 점이 있습니까? – Plamen

+0

@Plamen, 왜 기본 클래스에 대한 템플릿을 가지고 어떤 차이가 있는지 알 수는 없지만 확실히 말할 수는 없습니다. –

+0

답변 해 주셔서 감사합니다. 내가 템플릿을 사용하면 그것이 효과가 있다고 생각합니다. 몇 가지 테스트를 실행 해봤는데 컴파일러가 템플릿 매개 변수를 사용할 때 수행 할 작업을 결정할 수없는 것 같습니다. 베이스에'stupid' 함수가 있는데'error : 템플릿 매개 변수에 의존하는 'stupid'에 대한 인수가 없기 때문에 'stupid'선언을 사용할 수 있어야합니다 [-fpermissive]' 파생 된 (다시 선언되지 않고 방금 사용되었습니다). – Plamen

2

는 당신은 기본 클래스 멤버에 대한 using -directive이 필요합니다. detached 클래스에서 이름을 오버로드하지 않으면 using -directive가 전혀 필요하지 않습니다.

기본 클래스가 변경되어 함수 오버로드가 발생하는 경우 놀라 울 정도로 고려한 배경입니다. 따라서 기본 클래스의 오버로드는 기본적으로 숨겨져 있습니다. 그것들을 사용하기를 원한다면, 당신은 explusit 변경을하고 있습니다.

은의 그 규칙이 자리에없는 가정 object.f(0) 호출되는 멤버 f(double)을 정의하는 파생 클래스를 생각해 보자. 기본 클래스가 f(int)을 제공하도록 변경되고 오버로드가 표시되면 새 함수가 더 잘 일치합니다. 즉, 행동이 조용히 변경되기 전에 눈에 보이지 않고. 그것은 아마 나쁜 생각 일 것입니다.

0

네임 스페이스를 다루는 경우 사용해야합니다. 당신이 네임 스페이스에있는 일부 라이브러리를 사용할 수 있습니다

using namespace std; 
using std::cout; 
using std::endl; 
// without that you have to type it in following way 
std::cout << std::endl; 
// which is not the best way if you use it very often, 
// but good if you want to use some names in your code 

예를 들면 다음과 같습니다. 변수, 클래스 및 메서드를 잠그기 위해 만들어졌습니다. 그렇지 않으면 네임 스페이스가 더 많이 필요하고 프로젝트에서 일부 이름을 사용하지 못하게됩니다.

+0

OP의 질문에 [네임 스페이스와 아무 관련이 없습니다.] (http://en.cppreference.com/w/cpp/language/using_declaration) – Mgetz

관련 문제