C++

C++ 15주차

kimbh 2023. 12. 14. 15:44

실습 1

#include <iostream>
using std::cout;
using std::endl;
int main(void)
{
	int x = 10;
	int rx = x; // int rx = 10;
	cout << x << " " << rx << endl;
	rx = rx + 10;
	cout << x << " " << rx << endl; //참조자(rx)에 변화를 주면 그 타켓(x)도 변함
	x = x + 10;
	cout << x << " " << rx << endl; //타켓(x)에 변화를 주면 그 참조자(rx)도 변함
	return 0;
}

#include <iostream>
using std::cout;
using std::endl;
int main(void)
{
	int x = 10;
	int &rx = x; // int rx = 10;
	cout << x << " " << rx << endl;
	rx = rx + 10;
	cout << x << " " << rx << endl; //참조자(rx)에 변화를 주면 그 타켓(x)도 변함
	x = x + 10;
	cout << x << " " << rx << endl; //타켓(x)에 변화를 주면 그 참조자(rx)도 변함
	return 0;
}

다른점은 & 인데 별명참조자라고 부른다. 위에 코드를 해석하면
참조자에 대한 설명이다 이 설명을 보고 위에 읽으면 도움이 된다.
c++에서만 사용하고 참조자(reference)라고 부르며 별명이라고 부른다 . x가 바뀌면 rx가 바뀌고 rx가 바뀌면 x도 바뀐다.
참조자에 대한 예 이다. rx값이 x값이랑 같다는걸 알려주는 과정이다.

실습 2 기말 시험 범위

기말 고사 시험 범위 
강의 자료의 예제 소스를 모두 작성해 올 필요는 없습니다.
대부분 개념을 묻는 문제.
상속(13주 차 : C++11(상속 심화)의 pp. 13-14)은 소스를 작성해오면 도움이 됩니다.
 -------------
- 9주 차 : C++07(객체와 멤버 배열 생성자 소멸자 this)
중요 : pp. 19 일차원 배열의 이름 : 배열의 시작주소
제외 : pp.20-30, 34, 53, 59-62

- 10주 차 : C++08(const new)
제외 : pp. 3-5, 27-33, 50-51

- 11주 차 : C++09(함수중첩 디폴트 인자)
제외 : pp. 17, 23-26

- 12주 차 : C++10(상속)
제외 : pp. 36-44

- 13주 차 : C++11(상속 심화)
제외 : pp. 11
중요 : pp. 13-14 소스 작성 문제

- 13주 차 : C++11-1(overriding static)
제외 : pp. 11. 18-24

- 14주 차 : C++12(template STL friend 예외처리)
제외 : pp. 11-19, 22-31, 34, 35, 37, 38, 41-53, 59-61

- 15주 차 : C++13(콘솔파일입출력)
  아래 예제만 시험 범위
   pp.18, 22, 23, 29, 30, 31, 32

 

#include <iostream>
using namespace std;
int main() {
	cout << "디폴트\n";
	//cout.width(10);
	cout.width(5); // 앞에 있는 줄을 띄어줌
	cout << 123 << endl;
	cout << "[ * fill ]\n";
	cout.fill('-'); // 문자열은 안됨 문자만 사용 가능.
	cout.width(10);
	cout << -50 << endl;
	cout.width(10);
	cout << 100.25 << endl;
	cout.width(10);
	cout << "HanSH" << endl;
	cout.fill(' ');
	cout.precision(6); //소수점을 제외한 전체 자리수
	cout << 12.34567 << endl;
	cout << fixed; //소수점 이하의 자리수만 다루게 함
	cout.precision(3);//소수점 3자리만 출력
	cout << 12.34567 << endl; // 12.346만 출력됨 
	return 0; // 
}

위 코드도 시험범위에 포함.

출력할때 띄어쓰기, 채우기, 소수점을 다루고 싶을때 사용하는 멤버 함수이고, namespace std라는 지역이름을 사용하지 않으면 std::를 붙여야 한다.

실습 3

#include <iostream>
using namespace std;
int main()
{
	int num = 100;
	cout << "10진수: " << num << endl;
	cout << "16진수: " << hex << num << endl;
	cout << "8진수: " << oct << num << endl;
	return 0;
}

10으로 바꿨을 때 10진수는 -> 10, 16진수는 -> a, 8진수는 12로 바뀐다.

#include <iostream>
#include <iomanip> // setw를 사용하기 위해서 이 헤더파일을 사용해야함.
using namespace std;
int main()
{
    cout << "abcdefg\n";
    cout << 12345 << endl;
    cout << 123.45 << endl;
    cout << "10칸\n";
    cout << setfill('*');
    cout << setw(10) << "abcdefg" << endl; //setw 사용
    cout << setw(10) << 12345 << endl;
    cout << setw(10) << 123.45 << endl;
    //-----------
    cout << "디폴트\n";
    cout.width(10);
    cout << -50 << endl; 
    cout << "[ * fill ]\n";
    cout.fill('*');
    cout.width(10);
    cout << -50 << endl;
    cout.width(10);
    cout << 100.25 << endl;
    cout.width(10);
    cout << "HanSH" << endl;
    cout.fill(' ');
    cout.precision(6);  //소수점을 제외한 전체 자리수 
    cout << 12.34567 << endl;
    cout << fixed;  //소수점 이하의 자리수만 다루게 함 
    cout.precision(3);
    cout << 12.34567 << endl;

    return 0;
}

이 소스를 사용하기 위해서 iaomanip라는 헤더파일을 사용해 특정 함수를 적용하기 위해서 이다.

실습 3 파일로 출력하기 (파일 입출력)

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	ofstream hout("test1.txt"); // 출력파일 스트림 객체 hout 선언
	if (!hout) {
		cout << "출력할 파일을 열 수 없습니다.";
		return 1;
	}
	hout << "hello모두들안녕내가 누군지 아늬\n";
	hout << 100 << endl << hex << 23.4 << endl;
	hout.close(); //파일 종결
	return 0;
} // 게임에서 랭킹 시스템을 만들 때 사용한다. , 혹은 파일을 가지고 놀 때

 

디버깅 했을 때 콘솔창에서 안나오고.

 

위와 같은 파일이 생성되어서 파일에 소스입력한 내용들이 생성된것을 알 수 있다.

파일의 개방 / 종결하는 방법이다.

오른쪽 사진의 설명을 보면 ifstream, ofstream, fstream 등을 이용해서 개방을 할 수 있고 객체이름.close()할 시 파일들이 종결하는 것을 알 수 있다.

(파일을 저장하는 방법)

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	ofstream xxx("test2.txt"); // 출력파일 스트림 객체 hout 선언 객체이름 선언.
	if (!xxx) {
		cout << "출력할 파일을 열 수 없습니다.";
		return 1;
	}
	xxx << "안녕 내이름 kbh\n";
	xxx << "hello모두들안녕내가 누군지 아늬\n";
	xxx << 100 << endl << hex << 23.4 << endl;
	xxx.close(); //파일 종결
	return 0;
} // 게임에서 랭킹 시스템을 만들 때 사용한다. , 혹은 파일을 가지고 놀 때

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	ifstream hin("test3.txt"); // 입력파일 스트림 객체 hin 선언
	if (!hin) {
		cout << "입력할 파일을 열 수 없습니다.";
		return 1;
	}
	char str[50];
	int i, j;
	hin >> str >> i >> j;
	cout << str << " " << i << " " << j << endl;
	hin.close(); // 파일 종결
	return 0;
}

test3.txt라는 파일이 없으면 해당 콘솔창에서 출력된것처럼 열 수 없는 상태가 된다.

 

(파일에서 데이터를 입력 받는 방법)

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	ifstream hin("test.txt"); // 입력파일 스트림 객체 hin 선언
	if (!hin) {
		cout << "입력할 파일을 열 수 없습니다.";
		return 1;
	}
	char str[50];
	int i, j;
	hin >> str >> i >> j;
	cout << str << " " << i << " " << j << endl;
	hin.close(); // 파일 종결
	return 0;
}

 

(저장, 불러오기 하는 방법)

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	ofstream hout("test.txt");
	if (!hout) {
		cout << "출력할 파일을 열 수 없음.";
		return 1;
	}
	hout << "Han S. H. \n";
	hout.close();
	ifstream hin("test.txt");
	if (!hin) {
		cout << "입력할 파일을 열 수 없음.";
		return 1;
	}
	char str[50];
	hin >> str;
	cout << str << endl;
	hin.close();
	return 0;
}

(파일 입출력에서 특정 부분에서 변경하는법)

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	char ch;
	ifstream hin("test.txt");
	if (!hin) {
		cout << "입력할 화일을 열 수 없음";
		return 1;
	}
	hin.unsetf(ios::skipws);//공백 무시x
	while (!hin.eof()) {
		hin >> ch;
		if (ch == 'i') ch = 'j';
		cout << ch;
	}
	hin.close();
	return 0;
}

i인 부분을 j로 변경하는 소스이다. 한글같은 경우에 오류가 생길 수 있으므로 한글은 지워야 한다.

실습 1

실습 2

실습 1

실습 2

'C++' 카테고리의 다른 글

C++ 14주차  (0) 2023.12.07
C++ 프로그래밍 13주차  (0) 2023.11.30
C++프로그래밍 12주차  (0) 2023.11.23
C++ 프로그래밍 11주차  (0) 2023.11.16
C++ 10주차  (1) 2023.11.09