CPP) 상속 Class 강의 준비
#include <iostream>
using namespace std;
class parent {
public :
void print1() {
cout << "parent print1" << "\n";
}
virtual void print2() {
cout << "parent print2" << "\n";
}
virtual void print3() {
cout << "parent print3" << "\n";
}
};
class child : public parent {
public :
void print2() {
cout << "child print2" << "\n";
}
void print3(int x) {
cout << "child print3" << "\n";
}
};
int main() {
parent* p;
child c;
p = &c;
p->print1();
p->print2();
p->print3();
return 0;
}
virtual 함수를 사용 하기 위해서 메모리 할당을 통한 class 할당이 이루어져야한다.
출처: https://yeolco.tistory.com/125 [열코의 프로그래밍 일기]
#include <iostream>
using namespace std;
class Parent {
private: int num1;
public: int num2;
protected: int num3;
};
class Base : private Parent { };
int main() {
Base base;
cout << base.num1 << endl; // error!
cout << base.num2 << endl; // error!
cout << base.num3 << endl; // error!
return 0;
}
출처: https://blog.hexabrain.net/173 [끝나지 않는 프로그래밍 일기]
#include <iostream>
#include <fstream>
/**
* 2개의 파일에 있는 내용을 합쳐서 1개의 파일에 넣어야 한다.
* 먼저, ifstream , ofstream 을 사용해서 read, write 할 파일을 연결해주어야한다.
* 또한, 2개의 파일에서 중복되는 문장이 있으면, 중복되는 문장 없이 파일을 합쳐서 작성 해줘야한다.
* 저장될 파일은 output.txt 이고, 기반이 되는 파일 2개는 input1.txt input2.txt 이다.
* -------------------------------------------------------------------------------
* merge 함수는 합칠 파일 2개 (input 파일 2개)와 합쳐질 파일이 저장될 파일 (output 파일 1개)
* 를 매개변수로 갖는다.
* findSameLine 은 먼저 맨 처음 들어온 파일의 문장들과 2번 째 파일의 문장을 하나씩 비교해서, 같으면 true 를 반환하고
* 다르면 false 를 반환하는 함수이다.
* */
using namespace std;
/**
* merge 함수는, ifstream 의 입력파일 2개, ofstream 의 출력파일 1개를 매개변수로 갖는다
* 먼저 inputFileOne 의 모든 문장을 string 배열에 저장한다.
* 그리고 inputFileTwo 의 문장을 저장 할 때마다 그 문장과 string 배열 에 저장된 문자열을 비교한다. (findSameLine 을 사용해서)
* 비교한 문장이 다를 떄만, string 배열에 인덱스를 한개씩 추가해서 저장해준다.
* 그리고 모든 input 파일을 읽는 것이 끝나게 되면, 반복문을 통해 string 배열에 있는 저장된 문자열을 output 파일에 출력(작성)한다.
* */
void merge(ifstream& inputFileOne, ifstream& inputFileTwo, ofstream& outputFile);
/**
* findSameLine 은, 현재 사용된 배열의 크기 (index) 와, 비교할 문자열, 문자배열을 매개변수로 받는다.
* index 까지의 반복문을 통해서 문자열 배열 과 문자열을 비교해서 같으면 true 를 반환하고
* 다르면 false 를 반환한다.
* */
bool findSameLine(const int& index, const string& tempBuffer, const string* buffers);
/**
* main 함수는 ifstream 형식의 파일을 2개와 ofstream 형식의 파일 1개를 정의한다.
* inputFile 2개와 outputFile 이 모두 정상작동 할 때, (fail() 함수를 사용해서 오류가 나오면 프로그램을 종료시킨다)
* merge 함수를 실행한다. merge 함수가 끝나면, close() 함수를 사용해서 ifstream, ofstream 의 파일 연결을 없애주고
* 프로그램을 종료해준다.
*/
int main() {
ifstream inputFileOne, inputFileTwo;
// ifstream 형식으로 된 파일을 정의해준다. 파일 (input1.txt) 와 연결한다.
inputFileOne.open("input1.txt");
// inputFileOne 이 오류가 생기면, 프로그램을 종료해준다.
if(inputFileOne.fail()) {
cout << "input1 error" << endl;
exit(1);
}
// ifstream 형식으로 된 파일을 정의해준다. 파일 (input2.txt) 와 연결한다.
inputFileTwo.open("input2.txt");
// inputFileTwo 이 오류가 생기면, 프로그램을 종료해준다.
if(inputFileTwo.fail()) {
cout << "input2 error" << endl;
exit(1);
}
// ofstream 형식으로 된 파일을 정의해준다. 파일 (output.txt) 와 연결한다.
ofstream outputFile("output.txt");
// ofstream 이 오류가 생기면, 프로그램을 종료한다.
if(inputFileTwo.fail()) {
cout << "output error" << endl;
exit(1);
}
// 합칠 파일 2개와 합쳐지고 난 후 결과물로 저장될 파일 1개를 매개변수로 넣어주고 merge 함수를 실행한다.
merge(inputFileOne, inputFileTwo, outputFile);
// merge 함수가 끝나고 난 후, 파일 연결을 종료시켜준다.
inputFileOne.close();
inputFileTwo.close();
outputFile.close();
return 0;
}
void merge(ifstream& inputFileOne, ifstream& inputFileTwo, ofstream& outputFile) {
// 문자열 배열의 최대크기를 지정하는 정수형 상수이다. 현재는, 최대 50줄을 받을 것이다.
const int SIZE = 50;
// 문자열 배열의 동적 할당을 통해서 문자열 배열을 생성하였다.
// string buffers[SIZE]; 와 같은 의미를 갖는다.
string *buffers = new string[SIZE];
// index 값은 사용될 문자열 배열의 크기 값을 나타낸다.
int index = 0;
// inputFileOne이 끝날때 까지 반복하는 함수이다.
while(!inputFileOne.eof()) {
// 공백까지 읽어들이기 위해서 getline() 함수를 사용하였다.
// getline() 함수는 (stream, 저장될 변수 명) 의 매개변수 형식을 갖는다.
getline(inputFileOne, buffers[index]);
// 매개변수를 저장했으면, 사용될 문자열 배열의 크기를 1 증가시키낟.
index++;
}
// 2번째 파일을 읽을 떄는, 이미 저장된 buffrs 의 각각의 값과 2번째 파일의 문장과 비교해서
// 중복되는 표현이 있는지 확인해야한다. 따라서, string 값을 따로 사용한다.
string tempBuffer;
// 2번째 파일이 끝날때 까지 반복하는 함수이다.
while(!inputFileTwo.eof()) {
// tempBuffer 의 문자열을 저장한다.
getline(inputFileTwo, tempBuffer);
// 2번째 파일의 문장 1개가 저장된 값과 이미 있는 buffers 배열의 값 중에서 중복된 값이 있는지 비교한다.
bool isSame = findSameLine(index, tempBuffer, buffers);
// 중복된 표현이 아닐때만 문자열 배열에 저장해주고 index 값을 1 증가시켜준다.
if (!isSame) {
buffers[index] = tempBuffer;
index++;
}
}
// outputFile 에 출력(작성) 해준다.
// 반복문을 통해서 사용된 값 index 만큼 반복하며,
// outputFile 에 buffers 에 있는 값들을 하나씩 작성해주고,
// 문장을 띄어서 작성해준다. (-> 1문장씩 저장을 했는데 그대로 출력해주면 붙혀서 1문장으로 나오기 때문에 "\n" 으로 띄워줘야한다)
for(int i = 0; i < index; i++) {
outputFile << buffers[i] << "\n";
}
// 배열을 동적할당 하였기 때문에 프로그램이 끝난 후에는, delete 로 동적할당된 메모리를 풀어줘야한다.
delete [] buffers;
}
bool findSameLine(const int& index, const string& tempBuffer, const string* buffers) {
// 배열에 쓰인 크기를 index 로 받아서 그만큼 반복하며 배열에 있는 값들과 현재 저장된 문자열을 비교한다
for (int i = 0; i < index; i++) {
if (buffers[i] == tempBuffer) {
// 현재 저장된 문자열 값이 이미 저장된 문자열 배열에 있으면,
// true 를 반환한다
return true;
}
}
// 저장된 값중에 현재 입력된 문자열과 다르다면 false 를 반환한다.
return false;
}
Author And Source
이 문제에 관하여(CPP) 상속 Class 강의 준비), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jwisgenius/CPP-상속-Class-강의-준비저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)