🙌 Hello?
C++ 정리 - 40 (다중 상속 요약, 클래스 템플릿, 포인터들의 스택을 바르게 사용하는 경우)
다중 상속 요약 가상 기초 클래스들을 사용하지 않는 다중 상속 복습 파생 클래스가 서로 다른 기초 클래스로부터 이름이 같은 두 멤버를 상속한다면, 두 멤버를 구분하기 위해 그 파생 클래스에서 클래스 제한자를 사용할 필요가 있다. 가상 기초 클래스들을 사용하는 다중 상속에 대해 살펴보자. 파생 클래스가 파생을 나타낼 때 키워드 virtual을 사용한다면, 그것의 기초 클래스는 가상 기초 클래스가 된다. class marketing : public virtual reality {...}; 하나의 가상 기초 클래스의 여러 인스턴스로부터 상속되는 클래스는, 단 하나의 기초 클래스 객체만 상속한다. 간접적인 가상 기초 클래스를 사용하는 파생 클래스는, 그 파생 클래스의 생성자들이 간접적인 가상 기초 클래스 생성자..
C++ 정리 - 39 (using을 사용하여 접근 다시 정의하기, 다중 상속, 가상 기초 클래스와 가상이 아닌 기초 클래스의 혼합, 가상 기초 클래스와 기초 우위)
using을 사용하여 접근 다시 정의하기 protected 파생이나 private 파생을 사용할 때, 기초 클래스의 public 멤버들은 protected 멤버 또는 private 멤버가 된다. 어떤 특정 기초 클래스 메서드를 파생 클래스에서 public으로 사용하고 싶다고 가정하자. 한 가지 방법은, 기초 클래스 메서드를 사용하는 파생 클래스 메서드를 정의하는 것이다. double Student::Sum() const // Student는 기초 클래스, sum()은 valarray 메서드 {return std::valarray::sum();} 하나의 함수 호출을 다른 함수 안에 넣을 수 있는 다른 방도가 있다. using 선언을 사용하여 파생 클래스에서 사용할 특정 기초 클래스 멤버를 지정하는 것이다...
C++ 정리 - 38 (valarray 클래스: 훑어보기, 초기화 순서, private 상속, 기초 클래스 메서드에 접근하기, 기초 클래스 객체에 접근하기, 기초 클래스 프렌드에 접근하기, 컨테인먼트와 private 상속)
c++코드의 재활용 객체 멤버를 가지는 클래스 valarray 클래스: 훑어보기 valarray 헤더 파일이 valarray 클래스를 지원한다. 이 클래스는 수치 값들을 다루는 것이 목표이다. valarray는 템플릿 클래스로 정의되어 있다. 템플릿 측면에서 보면, 객체를 선언할 때 구체적인 데이터형을 지정해야 한다. 객체를 선언할 때 원하는 데이터형이 들어있는 각괄호()앞에 식별자 valarray를 붙여야 한다. valarray q_values; //int형의 배열 다음은 생성자들 중 일부를 사용하는 몇 가지 예이다. double gpa[5] = {3.1,3.5,3.8,2.9,3.3}; valarray v1; //double 형의 배열, 크기 O valarray v2(8); //int형 원소 8개짜리 ..
C++ 정리 - 37 (대입 연산자 관련 사항, private 멤버와 protected 멤버, 가상 메서드, 프렌드 관련 사항, 기초 클래스 메서드의 사용)
-대입 연산자 관련 사항 대입 연산자의 암시적 디폴트 버전은 멤버별 대입을 사용한다. 멤버별 대입은 타깃 객체의 각 멤버에 소스 객체의 해당하는 멤버의 값이 대입된다. 객체가 파생 클래스에 속한다면, 컴파일러는 기초 클래스 대입 연산자를 사용하여 파생 클래스 객체의 기초 클래스 부분에 대한 대입을 처리한다. 클래스 생성자가 new를 사용하여 포인터를 초기화하고 있다면, 명시적 대입 연산자를 제공해야 한다. c++는 파생 클래스 객체의 기초 부분을 위해 기초 클래스 대입 연산자를 사용하기 때문에, 특별한 주의를 요하는 데이터 멤버를 추가하지 않는 한, 파생 클래스를 위해 대입 연산자를 다시 정의할 필요는 없다. 파생 클래스가 new를 사용하고 있고, 명시적 대입 연산자를 제공해야 할 때, 대입 연산자는 새..
import kotlinx.android.synthetic.main.activity_main.* 이 안될 경우 해결 방법
바로 해결방법 부터 알아보자. 1. bulid.gradle에 들어가서 2. kotlin-android-extensions 플러그인 추가 3. 사진에 표시된 Sync Now 클릭 잠시 기다리면 kotlinx.android.systhetic.main.activity_main.* 을 사용할 수 있게 된다. 왜 안되는가? 안드로이드 스튜디오가 4.1로 업데이트 되면서 kotlin-android-extensions 플러그 인이 빠졌기 때문...
C++ 정리 - 36 (클래스 설계 복습, 클래스 메서드에 관련된 그 밖의 고려 사항, 객체 리턴과 참조 리턴, public 상속에 관련된 그 밖의 고려사항)
클래스 설계 복습 컴파일러가 자동으로 생성하는 멤버 함수들 -디폴트 생성자 디폴트 생성자는 매개 변수를 전혀 사용하지 않거나, 모든 매개 변수가 디폴트 매개변수를 사용하는 생성자이다. 사용자가 생성자를 하나도 정의하지 않으면, 사용자를 대신하여 컴파일러가 디폴트 생성자를 정의한다. 멤버 초기자 리스트를 사용하여 기초 클래스 생성자를 명시적으로 호출하지 않고 파생 클래스 생성자를 작성하면, 컴파일러는 새 객체의 기초 클래스 부분을 생성하기 위하여 기초 클래스 디폴트 생성자를 사용한다. 어떤 종류 이든 간에 사용자가 생성자를 정의하면, 컴파일러는 디폴트 생성자를 정의하지 않는다. 이러한 경우, 필요한 디폴트 생성자를 제공하는 것은 프로그래머의 책임이다. -복사 생성자 어떤 클래스를 위한 복사 생성자는, 그 ..
C++ 정리 - 35 (상속: is-a 관계, public 다형 상속, 가상 메서드는 왜 필요할까?, 정적 결합과 동적 결합, 포인터와 참조형의 호환, 가상 멤버 함수와 동적 결합, 접근제어: protected, ABC 철학, 상속과 ..
상속: is-a 관계 c++는 상속의 3가지 형식으로 public, protected, private를 가지고 있다. public 상속은 is-a 관계를 나타낸다. (파생 클래스 객체가 기초 클래스 객체이기도 함) 기초 클래스 객체를 대상으로 수행할 수 있는 모든 작업을, 파생 클래스 객체에 대해서도 수행 가능 public 다형 상속 public 다형 상속을 구현하는 두 가지 중요한 방법이 있다. 기초 클래스 메서드를 파생 클래스에서 다시 정의한다. 가상 메서드를 사용한다. virtual 키워드는 메서드가 객체에 의해 호출되지 않고 참조나 포인터에 의해 호출되었을 때 어느 메서드를 사용할 것인지 결정한다. virtual 키워드를 사용했을 경우에, 프로그램은 참조나 포인터에 의해 지시되는 객체형에 기초하여..
C++ 정리 - 34 (포인터와 객체에 대한 요약, 멤버 초기자 리스트(member initializer list), 클래스의 상속, 클래스 파생시키기, 생성자:접근에 대하여)
포인터와 객체에 대한 요약 객체를 지시하는 포인터를 사용할 때 다음과 같은 몇 가지 사항을 알아두어야 한다. 객체를 지시하는 포인터는 일반적인 포인터 표기 형식을 사용하여 선언한다. String *glamour; 기존의 객체를 지시하도록 포인터를 초기화 할 수 있다. String *first = &sayings[0]; new를 사용하여 포인터를 초기화 가능. 새 객체를 생성함 String *f = new String(sayings[choice]); new를 클래스와 함께 사용하면, 새로 생성되는 객체를 초기화하기 위해 적절한 클래스 생성자가 호출된다. //디폴트 생성자 호출 String *gleep = new String; //String(const char *) 생성자 호출 String *glop=ne..
C++ 정리 - 33 (복사 생성자, 대입 연산자, static 클래스 멤버 변수, 객체 리턴에 대한 관찰, new에 의한 객체 초기화)
복사 생성자 복사 생성자는 어떤 객체를 새로 생성되는 객체에 복사하는 데 사용된다. 일반적인 대입에 사용되는 것이 아니라 값 전달에 의한 함수 매개변수 전달을 포함한 초기화 작업에 사용된다. 클래스의 복사 생성자는 일반적으로 다음과 같은 원형을 가진다. Class_name(const Class_name &); 복사 생성자는, 새로운 객체가 생성되어 같은 종류의 기존의 객체로 초기화될 때마다 호출된다. 객체를 값으로 전달하면 복사 생성자가 호출되기 때문에, 참조로 전달하는 것이 좋다. 디폴트 복사 생성자는 static 멤버를 제외한 멤버들을 멤버별로 복사한다. 예를 들어, motto가 stringBad 객체라고 가정하면, 다음과 같은 네 가지의 정의 선언이 복사 생성자를 호출한다. StringBad dit..