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