vector클래스 생성자 인수, 생성자의 다른 인수 기입방식

2020. 10. 23. 22:21컴퓨터 수업/C++

vector클래스 생성자 인수

vector<int> vec(2);

- vector 클래스의 내부 data들을 int로 정의하고, 그 size 2이다.

 

vector<int> vec(2,3);

- vector 클래스의 내부 data들을 int로 정의하고, 그 size2이며, 그 초깃값은 3이다.

 

vector<int> vec(2, vector<int>(3));

-vector 클래스의 내부 data들을 int로 정의하고, 그 size는 2이며, 그 초깃값은 anonymous vector object이며 그 object의 내부 data들은 int로 정의되어있고, size는 3으로 초기화 되어있다.

-complie error, anonymous vec을 인수로 사용하는것은 가능하긴하지만, 현재 vector클래스의 내부 data들은 int로 정의되어있다. 따라서 안된다.

 

vector<vector<int>> vec(2,3);-바로 위와 마찬가지 이유로 컴파일이 안된다, 현재 내부 data는 vector<int> datatype으로 지정되어 있으나, 현재 초기화값을 3으로 지정중이기 때문에 되지않는다.

 

vector<vector<int>> vec(2,vector<int>(3));

-컴파일이 된다.  size를 2만큼 지정하고, 초기화를 vector<int>(3) 으로 행한다, 이때 이 vector의 int size는 3이다.


생성자의 다른 기입 방식

Cat::Cat(const std::string &_name, int _weight, int _height):name(_name),weight(_weight),height(_height){
    if(_weight < 0){
        std::cout <<"고양이의 무게가 어케 0보다 작아 바보야" << std::endl;
    }
    weight = 0;
}

생성자 옆에 : 붙이고

필드(파라미터),필드2(파라미터2){

} 이런식으로 생성자를 만든다.


생성자의 curly brace와 parentheses는 같다

즉 {}와 ()가 같다는 뜻이다

Cat(Frisky, 2, 3) == Cat{Frisky, 2, 3}


-> operator의 의의

Myclass *ob1;

 

*(ob1).name 과

ob1->name은 같다. 두 표현이 같음을 숙지


★static

@Class 내부의 멤버로서 썬언된 static 필드는 다음과 같이 초기화한다.

 

int Account::createdAccountcount  =0;

 

- main함수 내부에서 실행하며, int는 왜하지 아아악


@Class 내부의 멤버로서 선언된 static 필드는 다음과 같이 호출한다.

1. Class로 호출하기

Account::createdAccountcount+++;

2. Object로 호출하기

account1.createdAccountcount++;


@Class 내부의 static 메소드는

1.static 필드에만 접근 할 수 있다.

2.static 메소드만 재호출 할 수 있다.


전반적으로, static은 다른 storage에 저장되고, 이에따라 static은 class의 this 포인터를 가지지않기 때문이다. 따라서 @Class 내부의 static메소드가 static 필드와 메소드에만 접근 할 수 있는것이다. 해당 클래스에 대한 scope가 없기 때문에.

'컴퓨터 수업 > C++' 카테고리의 다른 글

C++ 템플릿에 관한 얘기  (0) 2020.10.26
CLion 인코딩  (0) 2020.10.24
대입연산자(=)의 오버로딩 시, referenece를 반환하는 이유  (0) 2020.10.16
lambda function  (0) 2020.10.15
header과 cpp파일의 include 관계  (0) 2020.10.15