«abstract-class» 태그된 질문

추상 클래스는 인스턴스화 할 수없는 클래스입니다. 그들은 일반적으로 확장 / 하위 클래스를 의미하며 일반적으로 하위 클래스에 의해 구현되어야하는 "추상 메서드"를 가지고 있습니다.

7
C #에서 확장 메서드가있는 인터페이스 대신 추상 클래스를 사용하는 경우
"Abstract class"와 "interface"는 비슷한 개념으로, 인터페이스가 두 가지 중 더 추상적 인 개념입니다. 차별화 요소 중 하나는 추상 클래스가 필요할 때 파생 클래스에 대한 메소드 구현을 제공한다는 것입니다. 그러나 C #에서는 최근에 확장 메서드가 도입되어이 차별화 요소가 줄어들어 인터페이스 메서드에 대한 구현을 제공 할 수 있습니다. 또 다른 차별화 요소는 …

9
클래스를 추상 클래스로 선언해야하는 이유는 무엇입니까?
구문, 추상 클래스에 적용되는 규칙을 알고 있으며 추상 클래스의 사용법을 알고 싶습니다. 추상 클래스는 직접 인스턴스화 할 수 없지만 다른 클래스에 의해 확장 될 수 있습니다 그렇게하는 것의 장점은 무엇입니까? 인터페이스와 어떻게 다른가요? 하나의 클래스가 여러 인터페이스를 구현할 수 있지만 하나의 추상 클래스 만 확장 할 수 있다는 것을 알고 …

4
C ++에서 가상 함수가 왜 그리고 어떻게 느려 집니까?
누구나 가상 테이블이 정확히 작동하는 방식과 가상 함수가 호출 될 때 어떤 포인터가 연관되는지 자세히 설명 할 수 있습니다. 실제로 느리다면 가상 함수를 실행하는 데 걸리는 시간이 일반 클래스 메서드보다 큼을 보여줄 수 있습니까? 일부 코드를 보지 않고 어떻게 / 무슨 일이 일어나고 있는지 쉽게 잃을 수 있습니다.

2
순수한 추상 클래스 및 인터페이스 구현
비록 이것이 C ++ 표준에서는 필수는 아니지만, 예를 들어 GCC가 순수한 추상 클래스를 포함하여 부모 클래스를 구현하는 방식은 해당 클래스의 모든 인스턴스화에 해당 추상 클래스의 v 테이블에 대한 포인터를 포함시키는 것입니다. . 당연히 이것은이 클래스의 모든 인스턴스 크기를 가지고있는 모든 상위 클래스에 대한 포인터로 팽창합니다. 그러나 많은 C # 클래스와 …

4
C #에서 추상 클래스를 정의로 사용
C ++ 개발자는 C ++ 헤더 파일에 익숙하며 코드 내에 일종의 "문서화"를하는 것이 유리합니다. 나는 보통 그 때문에 C # 코드를 읽어야 할 때 나쁜 시간을 보낸다. 내가 작업하는 클래스에 대한 그런 정신지도가 없다. 소프트웨어 엔지니어로서 프로그램의 프레임 워크를 설계한다고 가정 해 봅시다. C ++ 헤더로하는 것과 비슷하게 모든 클래스를 …

3
공개 회원을 가상 / 추상화하지 마십시오.
2000 년대에 제 동료는 공개 방법을 가상 또는 추상적으로 만드는 것이 반 패턴이라고 말했습니다. 예를 들어, 그는 잘 설계되지 않은 다음과 같은 클래스를 고려했습니다. public abstract class PublicAbstractOrVirtual { public abstract void Method1(string argument); public virtual void Method2(string argument) { if (argument == null) throw new ArgumentNullException(nameof(argument)); // default implementation …

5
열거 형이 취성 인터페이스를 작성합니까?
아래 예를 고려하십시오. ColorChoice 열거 형을 변경하면 모든 IWindowColor 하위 클래스에 영향을줍니다. 열거 형은 취성 인터페이스를 유발하는 경향이 있습니까? 더 다형성 유연성을 허용하는 열거 형보다 좋은 것이 있습니까? enum class ColorChoice { Blue = 0, Red = 1 }; class IWindowColor { public: ColorChoice getColor() const=0; void setColor( const ColorChoice …

2
추상 예외 슈퍼 타입
던지기 System.Exception가 그렇게 나쁘다고 여겨 지면 왜 처음부터 Exception만들어 지지 않았 abstract습니까? 그렇게하면 전화를 걸 수 없습니다. throw new Exception("Error occurred."); 이렇게하면 파생 된 예외를 사용하여 발생한 오류에 대한 자세한 정보가 제공됩니다. 예를 들어 라이브러리에 사용자 정의 예외 계층을 제공하려는 경우 일반적으로 예외에 대한 추상 기본 클래스를 선언합니다. public abstract …

4
공통 필드를 기본 클래스로 이동하는시기
저는 현재 두 개의 파생 클래스를, A그리고 B모두가 공통으로 필드를 가지고 있고 그것이 기본 클래스에 올라가 여부를 결정하기 위해 노력하고 있음. 이것은 기본 클래스에서 참조하지 않고, 다른 클래스가 파생 길 아래에 어떤 시점에서, 경우에 말을 결코 C, 그건이없는 _field1"최소 특권"(또는 무언가)의 주요되지는 경우에 위반 될 다음, 였다? public abstract class …

6
추상 클래스, 인터페이스의 차이점 및 사용시기
최근에는 OOP를 둘러보기 시작했습니다. 이제는 추상 클래스와 인터페이스의 차이점에 대해 더 많이 읽을수록 혼란스러워집니다. 지금까지 어느 것도 인스턴스화 할 수 없습니다. 인터페이스는 골격을 결정하는 구조적 청사진입니다. 코드를 부분적으로 구현할 수있어 초록이 다릅니다. 나는 나의 특정한 상황을 통해 이것들에 대해 더 배우고 싶습니다. 약간의 배경 정보를 더 원한다면 첫 번째 질문에 …

6
인터페이스 메소드를 추상 메소드로 고려할 수 있습니까?
나는 그것에 대해 생각하고 있었고, 의심이 있었다. 예를 들어 인터페이스를 선언하면 public interface MyInterface { public void method1(); public void method2(); } 이러한 인터페이스 방법을 추상적 인 것으로 간주 할 수 있습니까? 내 말은 추상적 인 방법의 개념은 다음과 같습니다. 추상 메소드는 선언되었지만 구현이 포함되지 않은 메소드입니다. 그렇다면이 방법들을 추상적 …

3
인터페이스를 직접 구현해야합니까 아니면 슈퍼 클래스에서 수행해야합니까?
차이점이 있습니까? public class A extends AbstractB implements C {...} 대... public class A extends AbstractB {...} abstract class AbstractB implements C {...} 두 경우 모두 클래스 A가 인터페이스를 준수한다는 것을 이해합니다. 두 번째 경우에는의 AbstractB인터페이스 메소드에 대한 구현을 제공 할 수 있습니다 C. 그게 유일한 차이점인가요? 나는의 인터페이스 방법 …

5
정적 메서드를 재정의 할 수없는 이유는 무엇입니까?
이 질문에 대한 답변 에서 일반적인 합의는 정적 메서드를 재정의해서는 안된다는 것입니다 (따라서 C #의 정적 함수는 가상 또는 추상적 일 수 없음). C #의 경우에만 해당되는 것은 아닙니다. Java도 이것을 금지하고 C ++도 좋아하지 않는 것 같습니다. 그러나 자식 클래스에서 재정의하려는 정적 함수 (예 : 팩토리 메서드)의 많은 예를 …

4
C ++ 및 Java의 추상 클래스 / 인터페이스에 대한 다른 사용 근거가 있습니까?
Herb Sutter에 따르면 구현을 가능한 한 분리하기 위해 C ++의 클래스를 추상화하는 추상 인터페이스 (모든 순수 가상 함수)를 선호해야합니다. 개인적으로이 규칙이 매우 유용하다고 생각하지만 최근에는 많은 Java 프로그래머와 함께 팀에 합류했으며 Java 코드에는이 지침이 존재하지 않는 것 같습니다. 함수와 그 구현은 종종 추상 클래스에 있습니다. 그래서 C ++에서도 Herb Sutter가 …

7
싱글 톤, 추상 클래스 및 인터페이스의 역할은 무엇입니까?
나는 C ++에서 OOP를 공부하고 있는데,이 세 가지 개념의 정의를 알고 있지만 그것을 언제 어떻게 사용하는지 실제로는 알 수 없습니다. 이 클래스를 예로 들어 보겠습니다. class Person{ private: string name; int age; public: Person(string p1, int p2){this->name=p1; this->age=p2;} ~Person(){} void set_name (string parameter){this->name=parameter;} void set_age (int parameter){this->age=parameter;} string get_name (){return …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.