본문 바로가기

C

c++ const, explicit

const는 붙일 수 있다면 무조건 붙이자.

explicit도 붙일 수 있다면 무조건 붙이자(형 강제)

friend는 oop를 해치므로 웬만하면 쓰지 말자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <string>
// Frined는 웬만하면 쓰지 말자
// Const와 explicit은 붙일 수 있으면 무조건 붙이자
 
class Cat
{
public:
    // 무조건 explicit하게 name과 age를 넣어줘야 함
    explicit Cat(std::string name, int age) : mName{ std::move(name) }, mAge{ age } {};
    void speak() const
    {
        //mName = "mutable!";
        std::cout << "name : " << mName << std::endl;
        std::cout << "age : " << mAge << std::endl;
        
        // mname이 mutable인 경우에는 const 함수 여도 가능 가능
        // 가급적이면 쓰지 않는다.
    };
 
    void age(int age)
    {
        mAge = age;
    }
 
    int age() const
    {
        return mAge;
    }
 
    void name(std::string name)
    {
        mName = std::move(name);
 
    }
 
    const std::string& name() const
    {
        return mName;
    }
private:
    mutable std::string mName;
    int mAge;
};
 
int main()
{
    const Cat kitty{ "kitty"3};
    kitty.speak();
 
    std::string name = kitty.name(); // copy
    const std::string& nameRef = kitty.name(); // no deep copy
 
    return 0;
}