학부내용 예습/[ 2021 겨울 ] C++

[ C++ ] 7강. 클래스, 객체지향 프로그래밍

haena02 2022. 1. 30. 02:23
반응형

클래스

 

구조체  - 사용자 정의 데이터 타입

- 연관있는 데이터를 하나로 묶음

 

클래스 = 구조체 + 함수

클래스에 접근제어자를 붙이지 않으면 모두 private 이다

 

접근 제어자 

public 어디서든 접근허용

protected 상속관계에 놓여 있을 때, 유도 클래스에서의 접근허용

private  클래스 내에서만 접근 허용

 

// 클래스 생성 예시

class Car{

private:
	char ID;
    int speed;
    
public:
	void showState();
    void Accel();
    
};

 

 

주의해야할 점

- 클래스 멤버에 초기값 주지 않기 (객체에서 주기)

 

Lamp클래스와 User클래스를 만들어거 유저가 램프를 컨트롤하는 프로그램

// 해더파일

#pragma once
#include <string>

class Lamp {
private:
	bool m_isOn;
	int m_illuminance;
public:
	void powerOnOff();
	void changeLight();
	void showState();
	void init();
};

class User {

private:
	string m_name;
public:
	void turnOnOff(Lamp& lamp);
	void changeLight(Lamp& lamp);
	void init();
};
#include "lec7_lec_lamp.h"
#include <iostream>

using namespace std;

void Lamp::powerOnOff() {
	m_isOn = !m_isOn;
}
void Lamp::changeLight() {
	if (m_isOn) {
		if (m_illuminance < 3)
			m_illuminance++;
		else
			m_illuminance = 1;
	}

	showState();
}

void Lamp::showState() {
	
	if (m_isOn) 
		std::cout << "밝기" << m_illuminance << "\n";	
	else
		std::cout << "전원이 꺼져있습니다" << "\n";
	
}

void Lamp::init() {
	m_isOn = false;
	m_illuminance = 1;
}

void User::turnOnOff(Lamp& lamp) {
	lamp.powerOnOff();
}
void User::changeLight(Lamp& lamp) {
	lamp.changeLight();
}
void User::init() {
	m_name = "no";
}

int main() {
	Lamp lamp1;
	lamp1.init();
	Lamp lamp2;
	lamp2.init();
	Lamp lamp3;
	lamp3.init();


	User user1;
	user1.init();
	user1.turnOnOff(lamp2);
	user1.turnOnOff(lamp3);
	user1.changeLight(lamp2);
	

}

 

반응형