类的定义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
}