내용이 기존 문법과 함께 여기저기 흩어져 있어 보기에 좀 어려워
MSDN을 참고하여 대충 정리하려함.
역시 설명은 MSDN이 갑이다..
C++11/14/17 기능에 대한 지원(최신 C++)
: https://msdn.microsoft.com/ko-kr/library/hh567368.aspx
균일 초기화 및 생성자 위임
: https://msdn.microsoft.com/ko-kr/library/dn387583.aspx중괄호 초기화
: https://msdn.microsoft.com/ko-kr/library/dn387583.aspx#Anchor_0. 클래스, 구조체, 공용 구조체를 대상으로 중괄호 초기화 사용 가능
. 암시적, 명시적으로 선언된 기본 생성자가 있는 경우 중괄호 초기화 사용 가능
. 기본생성자가 삭제(=delete)된 경우, 중괄호 기본 초기화를 사용 할 수 없음.
. 초기화 할 있는 곳(함수 매개 변수, 반환값, new 키워드)에서 사용 가능
#include <string> using namespace std; class class_a { public: class_a() {} class_a(string str) : m_string{ str } {} class_a(string str, double dbl) : m_string{ str }, m_double{ dbl } {} double m_double; string m_string; }; int main() { class_a c1{}; class_a c1_1; class_a c2{ "ww" }; class_a c2_1("xx"); // order of parameters is the same as the constructor class_a c3{ "yy", 4.4 }; class_a c3_1("zz", 5.5); }
* 클래스에 기본 생성자가 없는 경우 중괄호 초기화에 클래스 멤버가 나타나는 순서는 멤버가 나타나는 순서이고 건너 뛸 수 없음.
class class_d { public: float m_float; string m_string; wchar_t m_char; }; int main() { class_d d1{}; class_d d1{ 4.5 }; class_d d2{ 4.5, "string" }; class_d d3{ 4.5, "string", 'c' }; class_d d4{ "string", 'c' }; // compiler error class_d d5("string", 'c', 2.0 }; // compiler error }
class_d* cf = new class_d{4.5}; kr->add_d({ 4.5 }); return { 4.5 };
위임 생성자
: https://msdn.microsoft.com/ko-kr/library/dn387583.aspx#Anchor_2. 다른생성자에 위임하는 생성자의 멤버를 초기화 할 수는 없음.
class class_c { public: int max; int min; int middle; class_c(int my_max) { max = my_max > 0 ? my_max : 10; } class_c(int my_max, int my_min) : class_c(my_max) { min = my_min > 0 && my_min < max ? my_min : 1; } class_c(int my_max, int my_min, int my_middle) : class_c (my_max, my_min){ middle = my_middle < max && my_middle > min ? my_middle : 5; } }; int main() { class_c c1{ 1, 3, 2 }; }
댓글 없음:
댓글 쓰기