반응형
C++ 클래스와 추상 데이터 타입
클래스는 사용자 정의 데이터 유형으로, 데이터 멤버와멤버 함수를 가집니다. 데이터 멤버는 데이터를 저장하는 필드이고, 멤버 함수는 이러한 변수를 조작하는 함수입니다.
class Person
{
public:
string name;
int age;
void print()
{
cout << "Hi, my name is " << name << "and i am " << age
<< "years old." << endl;
}
};
int main()
{
Person person1;
person1.name = "Alice";
person1.age = 30;
person1.print();
Person* ptr_person = new Person;
ptr_person->name = "Bob";
ptr_person->age = 24;
ptr_person->print();
return 0;
}
c언어의 struct와 class는 데이터 멤버의 포함이었지만 c++은 멤버 함수 또한 포함할 수 있습니다.
클래스가 멤버 함수를 가지고 있고 이 멤버 함수또한 데이터처럼 호출을 할 수 있습니다.
그리고 Person 객체를 동적 생성하고 객체의 주소를 저장하는 포인터 변수이기 대문에 포인터 변수를 통해서 객체 안에 있는 멤버를 엑세스할때는 -> 를 통해서 엑세스를 해줍니다.
생성자
class Person
{
public:
string name;
int age;
Person() {}
Person(string name, int age): name(name), age(age) {}
void print()
{
cout << "Hi my name is" << name << "and I am " << age
<< "years old" << endl;
}
};
int main()
{
Person person1("Alice", 30);
person1.print();
Person* ptr_person = new Person("Bob", 24);
ptr_person->print();
return 0;
}
접근 지정자 : public/private
class Person
{
private:
string name;
int age;
public:
Person() {}
Person(string name, int age): name(name), age(age) {}
void print()
{
cout << "Hi, my name is " << name << "and I am " << age
<< "years old." << endl;
}
};
int main()
{
Person person1("Alice", 30);
person1.age = 20; //wrong
person1.print();
Person* ptr_person = new Person("Bob", 24);
ptr_person->name = "Hnery"; //wrong
ptr_person->print();
return 0;
}
private는 외부에서 사용할 수 없도록 막습니다. 그래서 int main에서 age와 name을 사용 못하기 때문에 int main에서 사용된 age와 name은 실행이 안되는 오류구문입니다.
데이터 타입에 대해 생각해보기
int a;
변수 a의 타입은 int입니다. 이것이 내포하는 의미는?
데이터 유형, 크기, 구조
- a에는 하나의 정수가 저장될 수 있습니다.
- 변수 a는 메모리에서 4바이트를 차지합니다.
- 첫 비트는 부호를 표현합니다.
이 데이터가 지원하는 연산과 그 의미
- a에 다른 정수를 +,-,*,/ 연산을 할 수 있습니다.
- >> << 연산자로 스트림으로 입출력할 수 있습니다.
- = 연산자로 복사하고, >, <, == 등으로 비교할 수 있습니다.
데이터 타입이란 데이터의 유형/구조/크기 등과 함게 그 데이터가 지원하는 연산을 정의하는 것입니다.
추상 데이터 타입
추상 데이터 타입(ADT)은 사용자의 관점에서 정의된 데이터 타입에 대한 수학적 모델로, 가능한 값, 가능한 연산 및 그 연산의 의미에 의해서 정의됩니다.
예를 들어 스택은 push/pop 연산을 지원하는 리스트(list)이며 하나의 ADT로 볼 수 있습니다. 객체지향언어의 클래스(class)는 ADT를 표현하는데 적합한 도구입니다.
반응형
'IT 프로그래밍 > 자료구조' 카테고리의 다른 글
[자료구조] Generic 프로그래밍과 C++ Template (0) | 2024.10.15 |
---|---|
[자료구조] class ArrayStack (0) | 2024.10.15 |
[자료구조] 스택의 구현 (0) | 2024.10.15 |
자료구조 4장 스택(STACK) (0) | 2024.10.15 |
[자료구조] list 사용 예시 (0) | 2024.10.08 |