C++类的基本定义与使用

1、类的基本定义

1.1、class关键字+类名,类名使用大驼峰命名规则;
1.2、使用private、protected、public修饰成员属性与方法;
1.3、方法名使用大驼峰命名规则,成员属性使用m_xxxx下划线命名规则;
1.4、构造函数与析构函数名字与类名相同,无返回值类型,可重载,析构函数前加~;

1
2
3
4
5
6
7
8
9
10
11
12
class ClassName{
private:    // 私有属性与方法
    string  m_prop1;
protected:  // 保护属性与方法
    int     m_prop2;
public:     // 公开属性与方法
    double  m_prop3;
    // 构造函数与析构函数
    ClassName();
    ~ClassName();
    void    Method();
};

2、类方法的实现

2.1、在Cpp文件中,引用.h或.hpp文件,通过ClassName::Method()的方式实现类方法;
2.2、同一个Cpp文件中可实现多个类的方法,通过作用域限定符(::)区分;

1
2
3
4
5
6
ClassName::ClassName()
{
    // 这是默认的构造函数,可省略
    // 一般用来对象初始化工作;
    // 可重载
}

3、基本示例

3.1、Student.hpp

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
//
//  Student.hpp
//  cplus
//
//  Created by 余西安 on 2018/9/5.
//  Copyright © 2018年 yusian. All rights reserved.
//
 
#ifndef Student_hpp
#define Student_hpp
 
#include <iostream>
using namespace std;
class Student{
private:
    string  m_name;
    int     m_age;
    string  m_sex;
public:
    Student();
    Student(string);
    Student(string, int);
    Student(string, int, string);
    ~Student();
 
    void    SetName(string);
    string  GetName();
 
    void    SetAge(int);
    int     GetAge();
 
    void    SetSex(string);
    string  GetSex();
 
    void    ShowInfo();
};
#endif /* Student_hpp */

3.2、Student.cpp

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
56
57
58
59
60
61
62
63
64
65
66
//
//  Student.cpp
//  cplus
//
//  Created by 余西安 on 2018/9/5.
//  Copyright © 2018年 yusian. All rights reserved.
//
 
#include "Student.hpp"
 
Student::Student(){
    cout << "## " << "默认构造" << endl;
}
Student::Student(string name):m_name(name)
{
    cout << "## " << "String构造" << endl;
}
Student::Student(string name, int age):m_name(name),m_age(age)
{
    cout << "## " << "String,int构造" << endl;
}
Student::Student(string name, int age, string sex):m_name(name),m_age(age),m_sex(sex)
{
    cout << "## " << "String,int,sex构造" << endl;
}
Student::~Student()
{
    cout << "** " << m_name << "释放..." << endl;
}
#pragma mark - Set|Get方法实现
void Student::SetName(string name)
{
    m_name = name;
}
string Student::GetName()
{
    return m_name;
}
void Student::SetAge(int age)
{
    if (age < 0) age = 0;
    m_age = age;
}
int Student::GetAge()
{
    return m_age;
}
void Student::SetSex(string sex)
{
    if (sex.compare("男")){
        m_sex = "男";
    }else if (sex.compare("女")){
        m_sex = "女";
    }else{
        m_sex = "保密";
    }
}
string Student::GetSex()
{
    return m_sex;
}
#pragma mark -
void Student::ShowInfo()
{
    cout << "姓名:" << m_name << ", 性别:" << m_sex << ", 年龄:" << m_age << endl;
}

3.3、main.cpp

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
#include <iostream>
#include "Student.hpp"
using namespace std;
 
int main(){
 
    // 在栈中创建对象,由系统回收内存空间,速度快但类似局部变量不能个部使用
    Student student;
    student.SetName("张三");
    student.SetAge(21);
    student.ShowInfo();
 
    // 在堆中创建对象,需要手动管理内存,使用灵活适合空间使用较大的场景
    Student *jack = new Student();
    jack->SetName("杰克");
    jack->SetAge(25);
    jack->ShowInfo();
 
    Student *rose = new Student("Rose");
    rose->SetSex("女");
    rose->ShowInfo();
 
    Student *sim = new Student("Sim", 22);
    sim->SetSex("女");
    sim->ShowInfo();
 
    Student *licy = new Student("licy", 22, "女");
    licy->ShowInfo();
 
    delete jack;
    delete rose;
    delete sim;
    delete licy;
    return 0;
}

3.4、运行结果:

## 默认构造
姓名:张三, 性别:, 年龄:21
## 默认构造
姓名:杰克, 性别:, 年龄:25
## String构造
姓名:Rose, 性别:男, 年龄:567
## String,int构造
姓名:Sim, 性别:男, 年龄:22
## String,int,sex构造
姓名:licy, 性别:女, 年龄:22
** 杰克释放...
** Rose释放...
** Sim释放...
** licy释放...
** 张三释放...
Program ended with exit code: 0

Leave a Reply