类的定义Student.cpp

#include <iostream>
using namespace std;

struct Student {
    // 成员变量
    string name;
    int age;

   // 成员函数
    void say() const {
        cout << name << "的年龄是" << age << endl;
    }
};
创建对象访问类的成员变量
  • 第一种 使用 . 访问成员变量
#include "student/Student.cpp"

int main() {
    // 创建对象
    Student student;
    student.name = "是小张啊";
    student.age = 21;
    student.say();
    return 0;
}
  • 第二种 使用对象指针
Student student;
 
// 创建的对象在栈上分配内存,需要使用&获取它的地址
Student stu;
Student *pStu = &stu;

// 或者使用new关键字
Student *pStu = new Student;

通过 new 创建出来的对象就不一样了,它在堆上分配内存,没有名字,只能得到一个指向它的指针,所以必须使用一个指针变量来接收这个指针,否则以后再也无法找到这个对象了,更没有办法使用它。也就是说,使用 new 在堆上创建出来的对象是匿名的,没法直接使用,必须要用一个指针指向它,再借助指针来访问它的成员变量或成员函数。

#include "student/Student.cpp"

int main() {
    //创建对象
    Student *pStu = new Student;
    pStu->name = "是小张啊";
    pStu->age = 21;
    pStu->say();
    delete pStu;  //删除对象
    return 0;
}

除了在类中定义成员函数,还可以在类体中声明函数,而把函数的定义写在类体外,例如:

#include <iostream>
using namespace std;

struct Student {
    //成员变量
    string name;
    int age;

    //成员函数
    void say();  //函数声明
};

//函数定义
void Student::say() {
    cout << name << "的年龄是" << age << endl;
}

没有实际作用,不推荐使用这种方式

结构体 const

在结构体中使用const 可以方式误操作结构体

// 声明一个 Student 的结构体
struct Student {
    //成员变量
    string name;
    int age;
};

// 打印这个结构体中的信息
void print(Student student){
    // 修改这个结构体的信息 
    student.name = "小廖";
    cout << student.name << "的年龄是" << student.age << endl;
    // 小廖的年龄是:21  - 但是如果我不想修改,这个是个误操作的话,我想正常打印"小张"
}

int main() {
    struct Student student = {"小张", 21};
    print(student);
}
// 只需要在函数中添加const 关键字
void print(const Student student){
    // 修改这个结构体的信息 
    // 提示你不能修改
    // student.name = "小廖";
    cout << student.name << "的年龄是" << student.age << endl;
    // 小张的年龄是:21  
}