도슐랭스타
C++ 맛보기와 C 복습(3)-함수, 구조체 본문
C 복습
main() 함수 에러
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!\n";
return 0;
}
int main() {
cout << "Hello World!\n";
return 0;
}
main 함수는 프로그램에 하나만 있어야 하는데 두 개가 있기 때문에 에러가 난다.
#include <iostream>
using namespace std;
void main1() {
cout << "Hello World!!\n";
}
int main() {
main1();
cout << "Hello World!\n";
return 0;
}
이렇게 리턴값이 없는 void main1() 함수로 만들고 main() 함수에서 호출하는 것은 에러가 나지 않는다.
parameter(매개변수)는 수학에서 변수와 같은 존재이고, argument(전달인자)는 실매개변수로 변수에 대입하는 값이라고 생각하면 편하다.
void
- 리턴값이 없으면 리턴형을 쓰는 자리에 void를 쓴다.
- 매개변수가 없으면 매개변수를 쓰는 자리에 void를 쓴다.
lower camel case
- 동사나 의미가 바뀌는 부분은 대문자, 나머지는 소문자로 이름을 만드는 방법이다.
C++ 맛보기
함수 정의
- 함수의 이름, 매개변수, 리턴형, 기능, 실행문 등을 적어서 함수를 만드는 것이다.
함수 호출
- 함수의 이름과 매개변수를 이용해서 함수를 사용하는 것이다.
함수 선언
- 함수의 이름과 매개변수, 리턴형을 적어서 컴파일러에게 함수의 존재를 미리 알려주는 것이다.
함수 만들기
#include <iostream>
int main()
{
display(); //함수 호출, call
return 0;
}
void display() //함수 정의
{
std::cout << "도도" << std::endl;
}
이렇게 하면 에러가 난다.
main 함수를 먼저 읽기 때문에 밑에 있는 display() 함수의 존재를 모른다.
#include <iostream>
void display(void); //함수 선언, 프로토타입(prototype), 원형
int main()
{
display(); //함수 호출, call
return 0;
}
void display() //함수 정의
{
std::cout << "도도" << std::endl;
}
이렇게 main() 함수 위에 선언을 해주면 에러가 나지 않고 잘 출력이 된다.
#include <iostream>
void display(void); //함수 선언, 프로토타입(prototype), 원형
void display1(void);
int main()
{
display(); //함수 호출, call
display1();
return 0;
}
void display() //함수 정의
{
std::cout << "도도" << std::endl;
}
void display1() //함수 정의
{
std::cout << "ㅎㅎ" << std::endl;
}
이런 식으로 함수를 추가해 가며 코드를 짜면 된다.
매개변수가 있는 함수
#include <iostream>
void doubleNum(int x); //함수 선언, 프로토타입(prototype), 원형
int main()
{
doubleNum(4); //함수 호출, call
return 0;
}
void doubleNum(int x) //함수 정의
{
std::cout << x * 2;
}
void 에러
#include <iostream>
void doubleNum(int x);
void doubleNumReturn(int x);
int main()
{
doubleNum(4);
doubleNumReturn(10);
return 0;
}
void doubleNum(int x)
{
std::cout << x * 2 << std::endl;
}
void doubleNumReturn(int x)
{
return (x * 2);
}
리턴값이 있는데 void 함수를 사용하기 때문에 문제가 생긴다
#include <iostream>
void doubleNum(int x);
int doubleNumReturn(int x);
int main()
{
doubleNum(4);
doubleNumReturn(10);
return 0;
}
void doubleNum(int x)
{
std::cout << x * 2 << std::endl;
}
int doubleNumReturn(int x)
{
return (x * 2);
}
이렇게 해주면 에러는 나지 않는데 10*2의 값이 출력되지는 않는다. doubleNumReturn 함수는 그저 값을 리턴하는 함수지 출력은 하지 않으므로 출력은 따로 해줘야 한다.
#include <iostream>
void doubleNum(int x);
int doubleNumReturn(int x);
int main()
{
doubleNum(4);
std::cout << doubleNumReturn(10);
return 0;
}
void doubleNum(int x)
{
std::cout << x * 2 << std::endl;
}
int doubleNumReturn(int x)
{
return (x * 2);
}
여러 가지 함수
#include <iostream>
void doubleNum(int x);
int doubleNumReturn(int x);
int add(int x, int y);
char vending(int x);
int main()
{
doubleNum(4);
std::cout << doubleNumReturn(10) << std::endl;
std::cout << add(1, 2) << std::endl;
std::cout << vending(1) << std::endl;
return 0;
}
void doubleNum(int x)
{
std::cout << x * 2 << std::endl;
}
int doubleNumReturn(int x)
{
return (x * 2);
}
int add(int x, int y)
{
return (x + y);
}
char vending(int x)
{
if (x == 1) return 'A';
else return 'B';
}
자판기 함수
#include <iostream>
const char* vending1(int x);
int main()
{
std::cout << vending1(1) << std::endl;
return 0;
}
const char* vending1(int x) //문자열의 자료형에는 const char*를 쓴다.
{
if (x == 1) return "커피";
else return "유자차";
}
C언어에서 문자열 자료형은 const char* 를 사용해야 한다!
string 자료형
#include <iostream>
const char* vending1(int x); //C
std::string vending2(int x); //C++
int main()
{
std::cout << vending1(1) << std::endl;
std::cout << vending2(1) << std::endl;
return 0;
}
const char* vending1(int x) //C
{
if (x == 1) return "커피";
else return "유자차";
}
std::string vending2(int x) //C++
{
if (x == 1) return "aaa";
else return "bbb";
}
문자열을 리턴하려면 C에서는 포인터를 사용해야 하는데 C++은 string을 사용할 수 있다!!
구조체
#include <iostream>
struct Man {
int age; //멤버
double weight; //멤버
};
int main()
{
struct Man dodo;
dodo.age = 100;
dodo.weight = 20.5;
std::cout << dodo.age << std::endl;
std::cout << dodo.weight << std::endl;
return 0;
}
"Man"이라는 자료형을 만든 것이고 구조체 안의 멤버는 "."으로 접근한다!
#include <iostream>
struct Man {
int age; //멤버
double weight; //멤버
};
int main()
{
Man dodo; //struct 생략!
dodo.age = 100;
dodo.weight = 20.5;
std::cout << dodo.age << std::endl;
std::cout << dodo.weight << std::endl;
return 0;
}
이렇게 C++에서는 struct를 생략해도 에러가 나지 않는다! 하지만 C에서는 생략하면 에러가 난다!
#include <iostream>
struct Man {
int age; //멤버
double weight; //멤버
};
int main()
{
Man dodo = {100, 20.5}; //한 번에 입력
std::cout << dodo.age << " " << dodo.weight << std::endl;
return 0;
}
한 번에 구조체 멤버의 값을 입력할 수도 있다.
#include <iostream>
struct Man {
int age; //멤버
double weight; //멤버
std::string name;
};
int main()
{
Man dodo = { 100, 20.5, "도도"}; //한 번에 입력
std::cout << dodo.age << " " << dodo.weight << " " << dodo.name << std::endl;
return 0;
}
이름도 넣어보았다.
C언어의 구조체 멤버로는 변수만 넣을 수 있지만 C++의 구조체 멤버로는 변수와 "함수"를 넣을 수 있다!
기타 내용
- Ctrl + M + O : 함수 접어서 보기
- Ctrl + M + I : 함수 펼쳐서 보기
도슐랭스타
★★★★☆ : 재밌다!
C++에서는 "string"을 사용할 수 있다니~~ 너무 편하다! 처음에 C를 공부할 때 "const char*"를 왜 사용해야 하는지 사실 잘 이해하지 못했는데 이렇게 비교하며 공부하니까 이제는 너무나 잘 알겠다!! C++ 너무 좋다,, 체고,,♡
출처: https://www.youtube.com/@smilehan8416
Smile Han
www.youtube.com
'C++' 카테고리의 다른 글
C++ - 객체와 멤버 생성자 소멸자 this (1) | 2023.11.01 |
---|---|
C++-구조체와 클래스 (0) | 2023.10.18 |
C++ 맛보기와 C복습(4)-구조체, 객체지향 프로그래밍 (0) | 2023.10.11 |
C++맛보기와 C복습(2)-제어문 (0) | 2023.09.20 |
C++ 맛보기와 C복습(1)-연산자 (0) | 2023.09.13 |