C++ 기초!!

 https://wikidocs.net/17145

C++ 기초!!

iostream은 C++에 있는 입출력을 위한 헤더 파일이다. 이는 C++ 표준 라이브러리의 하나이다. Input/Output Stream(입출력 스트림)에서 이름을 따왔다. C 프로그래밍 언어의 stdio.h와 같은 역할을 한다.

사용 예[편집]

보통 Hello world 프로그램에서는 다음과 같이 표현한다 :

#include <iostream>
using namespace std;

int main()
{
    cout << "Hello, world!\n";
    return 0;
}

이 프로그램은 새 줄 문자에 "Hello, world!"를 출력한다.

출력 포매팅[편집]

메서드[편집]

width(int x)다음 출력을 위한 문자의 최소 숫자
fill(char x)최소 채워진 길어지도록 길이 필요한 경우 안의 채워져 쓰여진 문자
precision(int x)플로팅-포인트 숫자를 위한 중요한 셈의 숫자 설정

예제:

cout.width(10);
cout << "ten" << "four" << "four";

cout == output

cin == input


예제 2: scanf를 대신하는 데이터 입력

#include <iostream>

int main(void)
{
    int val1;
    std::cout << "첫번째 정수 입력 : ";
    std::cin >> val1;  // std::cin은 C언어에서의 스트림 stdin에 해당

    int val2;  // C++에서는 지역변수를 아무 곳에서나 선언 가능
    std::cout << "두번째 정수 입력 : ";
    std::cin >> val2;

    int result = val1 + val2;
    std::cout << "덧셈 결과 : " << result << std::endl;

    system("pause");  // VC++ 에서만 필요
    return 0;
}

예제 4: 배열 기반의 문자열 입출력

#include <iostream>

int main(void)
{
    char name[100];
    char lang[200];

    std::cout << "이름은 무엇입니까? ";
    std::cin >> name;

    std::cout << "좋아하는 프로그래밍 언어는 무엇인가요? ";
    std::cin >> lang;

    std::cout << "내 이름은 " << name << "입니다." << std::endl;
    std::cout << "좋아하는 프로그래밍 언어는 " << lang << "입니다." << std::endl;

    system("pause");  // VC++ 에서만 필요

    return 0;
}

예제 1: 함수 오버로딩

#include <iostream>

void MyFunc(void);
void MyFunc(char c);
void MyFunc(int a, int b);

int main(void)
{
    MyFunc();
    MyFunc('A');
    MyFunc(12, 13);

    system("pause");  // VC++ 에서만 필요

    return 0;
}

void MyFunc(void)
{
    std::cout << "MyFunc(void) called" << std::endl;
}

void MyFunc(char c)
{
    std::cout << "MyFunc(char c) called" << std::endl;
}

void MyFunc(int a, int b)
{
    std::cout << "MyFunc(int a, int b) called" << std::endl;
}

예제 1: 매크로 함수 (복습)

메크로 함수는 #define을 통해서 메크로를 생성하고 실제 main에서 호출시 define 된 데이터 값을 처리하여 출력하게 하는 방식
#include <iostream>

#define SQUARE(x) ((x)*(x))

int main(void)
{
    std::cout << SQUARE(5) << std::endl;  // int형에 적용
    std::cout << SQUARE(2.7) << std::endl;  // double형에 적용 

    system("pause");  // VC++ 에서만 필요
    return 0;
}


예제 2: C++ 기반의 인라인 함수 정의

인라인도 위와 동일하나 단순 연산에 대한 값 뿐아니라 인라인 안에서 처리를 하고 return 값을 통해 출력
#include <iostream>

inline int SQUARE(int x)
{
    return x*x;
}

int main(void)
{
    std::cout << SQUARE(5) << std::endl; 
    std::cout << SQUARE(7.15) << std::endl; // 7.15를 7로 간주 데이터 손실

    system("pause");  // VC++ 에서만 필요
    return 0;
}

예제 3: template 통한 임의의 자료형(뒤에서 자세히 공부함)

임의의 자료형T 의 객체를 생성하고 그 연산 값을 출력하는것 뒤에 자세히 공부한다고 함
#include <iostream>

template <typename T>
inline T SQUARE(T x)
{
    return x*x;
}

int main(void)
{
    std::cout << SQUARE(5) << std::endl; 
    std::cout << SQUARE(7.154) << std::endl;

    system("pause");  // VC++ 에서만 필요
    return 0;
}

예제 1: 범위지정 연산자 :: 와 이름공간

네임스페이스
#include <iostream>

namespace Company1
{
    void func(void)
    {
        std::cout << "Company1 이 정의한 함수" << std::endl;
    }
}

namespace Company2
{
    void func(void)
    {
        std::cout << "Company2 이 정의한 함수" << std::endl;
    }
}

int main(void)
{
    Company1::func();
    Company2::func();

    system("pause");  // VC++ 에서만 필요
    return 0;
}

예제 2: 이름 공간 기반의 함수 선언과 정의의 구분

내임스페이스를 토대로 함수를 선언해 두고 네임스페이스::함수를 통해서 각각의 함수를 정의
#include <iostream>

namespace Company1
{
    void func(void);
}

namespace Company2
{
    void func(void);
}

int main(void)
{
    Company1::func();
    Company2::func();

    system("pause");  // VC++ 에서만 필요
    return 0;
}

void Company1::func(void)
{
    std::cout << "Company1 이 정의한 함수" << std::endl;
}

void Company2::func(void)
{
    std::cout << "Company2 이 정의한 함수" << std::endl;
}

예제 3: 동일한 이름 공간에 정의된 함수 호출

다른 네임스페이스에 함수를 선언/정의 하고 main에서 A의 네임스페이스의 함수를 호출 한 후
A의 함수 내에 B의 함수를 호출 함으로서 다른 네임 스페이스의 함수값을 호출 하는 것이 가능
#include <iostream>

namespace Company1
{
    void func(void);
    void hello(void); // 각각의 함수마다 이름공간으로 에워 싸도 됨
}

namespace Company2
{
    void func(void);
}

int main(void)
{
    Company1::func();

    system("pause");  // VC++ 에서만 필요
    return 0;
}

void Company1::hello(void)
{
    std::cout << "hello" << std::endl;
}

void Company1::func(void)
{
    std::cout << "Company1 이 정의한 함수" << std::endl;
    hello();  // 같은 이름공간의 함수는 이름공간 생략 가능, 즉 Company1::hello()
    Company2::func();  // 다른 이름공간의 함수
}

void Company2::func(void)
{
    std::cout << "Company2 이 정의한 함수" << std::endl;
}

예제 4: 이름 공간의 중첩

이건 단순 부모 자식 관계 설명
#include <iostream>

namespace Parent
{
    int num = 0;
    namespace Son
    {
        int num = 1;
    }
    namespace Daughter
    {
        int num = 2;
    }
}

int main(void)
{
    std::cout << Parent::num << std::endl;
    std::cout << Parent::Son::num << std::endl;
    std::cout << Parent::Daughter::num << std::endl;

    system("pause");  // VC++ 에서만 필요
    return 0;
}

예제 5: using을 이용한 이름 공간의 명시

using NameSpace::Function 을 이용하면 main에서 이후의 함수 호출 시 네임스페이스를 생략하는 것이 가능
#include <iostream>

namespace Hybrid
{
    void HybFunc(void)
    {
        std::cout << "So simple function!" << std::endl;
        std::cout << "In namespace Hybrid" << std::endl;
    }
}

int main(void)
{
    using Hybrid::HybFunc; // 이 라인 실행후 namespace Hybrid는 생략 가능
    HybFunc();

    system("pause");  // VC++ 에서만 필요
    return 0;
}

예제 6: 프로그램 전체에 영향을 미치는 using의 선언 방법

함수 호출에 있어서 네임스페이스를 미리 선언 함으로서 코드의 단순화가 가능
using namspace::함수;
참고 : std 는 표준 C++ 라이브러리
#include <iostream>

using std::cin;
using std::cout;
using std::endl;

int main(void)
{
    int num = 20;
    cout << "Hello World!" << endl;
    cout << "Hello " << "World!" << endl;
    cout << num << ' ' << 'A';
    cout << ' ' << 3.14 << endl;

    system("pause");  // VC++ 에서만 필요
    return 0;
}

예제 7: 이름 공간 std

using namespace std를 하면 std 안의 이름 공간을 메인으로 이용하게 됨
#include <iostream>

using namespace std;

int main(void)
{
    int num = 20;
    cout << "Hello World!" << endl;
    cout << "Hello " << "World!" << endl;
    cout << num << ' ' << 'A';
    cout << ' ' << 3.14 << endl;

    system("pause");  // VC++ 에서만 필요
    return 0;
}

예제 8: 이름 공간의 별칭

namespace도 객체로서 부모 자식 관계로 선언하는것이 가능하며 
AAA
{
    BBB
    {
       CCC
       {
          string a;
       }
    }
}

namespace ABC = AAA::BBB::CCC;
cout << ABC::a <<endl;

와 같은 방식을 통해 네임스페이스를 호출 할때 단순화가 가능
#include <iostream>

using namespace std;

namespace AAA
{
    namespace BBB
    {
        namespace CCC
        {
            int num1;
            int num2;
        }
    }
}

int main(void)
{
    AAA::BBB::CCC::num1 = 20;
    AAA::BBB::CCC::num2 = 30;

    namespace ABC = AAA::BBB::CCC;

    cout << ABC::num1 << endl;
    cout << ABC::num2 << endl;

    system("pause");  // VC++ 에서만 필요

    return 0;
}

예제 9: 범위 지정 연산자 :: 의 또 다른 기능

using namespace Namespace 를 통해서 전역 네임스페이스를 설정하고
int val; 을 통해 지역 변수를 생성한 후

int main(void)
{
val += 3; 지역 변수 변경;
::val += 3;  을 통해 전역 변수의 값을 변경하는 것도 가능(std::val 의 의미)
}

#include <iostream>

using namespace std;

int val = 100;

int main(void)
{
    int val = 20; // 지역 변수
    val += 3;  // 지역 변수 val의 값 증가
    ::val += 3; // 전역변수 val의 값 증가

    cout << "지역변수 val의 값: " << val << endl;
    cout << "전역변수 val의 값: " << ::val << endl;

    system("pause");  // VC++ 에서만 필요
    return 0;
}














댓글

이 블로그의 인기 게시물

About AActor!!! "UObject" has no member "BeginPlay"

UNREAL Android build information

C++ 생성자 위임 (delegating constructor)