반응형
오늘 공부한 내용📓
- C++
개념 공부
정적 함수에서 비정적 변수를 사용할 수 없는 이유
- static(정적)의 개념
- 객체나 함수를 클래스 또는 파일의 범위 내에서만 액세스할 수 있도록 하는 키워드
- 클래스의 모든 객체가 공유하기 때문에, 클래스에 단 하나만 생성됨
- static 멤버는 클래스 밖에서 선언할 수 있어, 인스턴스가 생성되기 전에도 액세스 가능
- non-static(비정적)의 개념
- 클래스의 인스턴스와 함께 존재
- 즉, 클래스의 인스턴스가 생성되어야만 사용할 수 있음
- 정적 멤버 함수는 클래스의 인스턴스를 생성하지 않고도 호출할 수 있기 때문에, 비정적 멤버 변수가 할당된 메모리에 접근할 수 없음
정적 함수에서 비정적 변수를 사용하는 방법
- 객체를 생성한 후 해당 객체를 통해 비정적 멤버 변수에 접근해야 함
class MyClass { public: int non_static_ver; static void static_fun() { MyClass test; std::cout << test.non_static_ver; } } int main() { MyClass::static_fun(); }
vector 를 클래스 생성자/배열로 초기화 하는 방법
//기본적인 vector 초기화 방법
//1. 클래스 생성자
std::vector<int> v(10, 5); //10개의 요소를 모두 5로 초기화
//2. 배열
int arr[] = {1, 2, 3, 4, 5};
std::vector<int> v(arr, arr + 5); //배열 arr의 요소를 벡터 v에 초기화
//vector의 제네릭이 클래스일때 초기화 방법
//1. 클래스 생성자
std::vector<MyClass> v(10, MyClass()); //10개의 요소를 MyClass의 기본 생성자로 초기화
//2. 배열
int arr[] = {1, 2, 3, 4, 5};
std::vector<MyClass> v(arr, arr + 5); //배열 arr의 요소를 벡터 v에 초기화
함수 공부
time
#include <time.h>
time_t time( time_t *arg );
- 함수 설명
- 1970년 1월 1일(UTC)부터 현재까지 경과 시간을 time_t 타입으로 반환하는 함수
- arg 구조체에 현재 시간을 저장함
- 인자
- arg : time_t 타입의 변수를 가리키는 포인터
- 반환값
- 성공 시, time_t 형식으로 현재 시간 반환
- 실패 시 (time_t)(-1)
localtime
#include <ctime>
std::tm* localtime( const std::time_t *time );
- 함수 설명
- time_t 구조체의 값을 tm 구조체로 변환하는 함수
- 인자
- time : time_t 타입의 시간값을 가리키는 포인터
- 반환값
- 성공 시, tm 구조체에 대한 포인터
- 실패 시, null 포인터
strtime
#include <ctime>
std::size_t strftime( char* str, std::size_t count, const char* format, const std::tm* time );
- 함수 설명
- 시간과 날짜를 문자열로 변환하는 함수
- printf 처럼 형식에 맞게 시간, 날짜를 출력할 수 있음
- 인자
- str : 문자열을 저장할 버퍼
- count : 버퍼의 크기
- format : 문자열의 형식
- time : 시간과 날짜를 저장한 구조체
- 반환값
- 성공 시, str의 바이트 수 (’\0’ 미포함)
- str 보다 count 가 작을 경우, 0이 반환
어려웠던 내용😢
우선 42seoul cpp00 ex02 과제에서 제공되는 tests.cpp 파일을 이해하는게 어려웠다,, 얼추 이해하고 넘어갔다고 생각했는데, 잘못 생각했던 부분도 있었고, 누가 물어봐서 답변하려니 턱턱 막히기도 했다. 일단 진도를 빼기 위해서 문제를 풀면서 필요한 이론 위주로 공부하다보니, 가볍게만 파악하고 넘어가게 되서 장단점이 있게 느껴진다.
그리고 static 이 참 어렵다,, C 에서는 어렵지 않았는데 C++에서는 왜 이렇게 어렵게 느껴지는지!!
지금은 static 변수를 초기화하고 값을 바꾸는 부분에서 문제가 있는지 컴파일 에러가 난다. 레퍼런스가 잘 안보여서 아직 고치지 못했다..
Undefined symbols for architecture x86_64:
"Account::_nbAccounts", referenced from:
Account::Account() in Account.o
Account::Account(int) in Account.o
Account::getNbAccounts() in Account.o
"Account::_totalAmount", referenced from:
Account::Account() in Account.o
Account::Account(int) in Account.o
Account::getTotalAmount() in Account.o
"Account::_totalNbDeposits", referenced from:
Account::Account() in Account.o
Account::Account(int) in Account.o
"Account::_displayTimestamp()", referenced from:
Account::Account(int) in Account.o
Account::displayAccountsInfos() in Account.o
Account::makeDeposit(int) in Account.o
Account::makeWithdrawal(int) in Account.o
Account::displayStatus() const in Account.o
Account::~Account() in Account.o
"Account::_totalNbWithdrawals", referenced from:
Account::Account() in Account.o
Account::Account(int) in Account.o
ld: symbol(s) not found for architecture x86_64
궁금한 내용 / 부족한 내용🧐
위 에러를 어떻게 해결할 수 있을지 내일 더 찾아봐야겠다.
제가 공부한 내용을 기록하고 있습니다.
혹시 수정이 필요한 부분이 있다면, 댓글로 지적 부탁드립니다!
선한 관심과 도움 감사드립니다😊
반응형
'TIL::Today I Learn' 카테고리의 다른 글
[TIL] 20230616 (0) | 2023.06.17 |
---|---|
[TIL] 20230601 (0) | 2023.06.02 |
[TIL] 20230531 (0) | 2023.06.01 |
[TIL] 20230529 (1) | 2023.05.30 |
[TIL] Description (0) | 2023.05.30 |