1.5 结构体和类
返回目录 1 面向对象技术
上一节 1.4 cpp编程基础
下一节 1.6 cpp的常见特性
结构体
源代码
/* struct.cpp 结构体实例 */#include <iostream>#include <string>struct Student{ std::string name; // 姓名 std::string sex; // 性别 int age; // 年龄}typedef Student;void STUDENT_dispalyInfos(Student student){ /* 这个函数用来显示学生信息 */ std::cout << "学生信息" << std::endl; std::cout << "姓名:" << student.name << std::endl; std::cout << "性别:" << student.sex << std::endl; std::cout << "年龄:" << student.age << std::endl;}int main(){ Student XiaoMing; XiaoMing.name = "小明"; XiaoMing.sex = "男"; XiaoMing.age = 18; STUDENT_dispalyInfos(XiaoMing); return 0;}
编译运行
学生信息姓名:小明性别:男年龄:18
类
源代码
/* class.cpp 类实例 */#include <iostream>#include <string>class Student{private: std::string name; // 姓名 std::string sex; // 性别 int age; // 年龄public: Student(); // 这是构造函数 Student(std::string name, std::string sex, int age); // 构造函数重载 ~Student(); // 析构函数 void Init(std::string name, std::string sex, int age); // 初始化函数 void displayInfos(); // 显示成员信息的函数};Student::Student(){ std::cout << "-++类实例化时,会先调用构造函数" << std::endl; this->name = ""; this->sex = ""; this->age = 0; std::cout << "+++" << name << "初始化完成" << std::endl;}Student::Student(std::string name, std::string sex, int age){ std::cout << "-++类实例化时,会先调用构造函数" << std::endl; this->name = ""; this->sex = ""; this->age = 0; std::cout << "+++" << name << "初始化完成" << std::endl; Init(name, sex, age);}Student::~Student(){ std::cout << "-++对象销毁时,会调用析构函数" << std::endl; std::cout << "+++" << this->name << "已销毁" << std::endl;}void Student::displayInfos(){ std::cout << "————学生信息————" << std::endl; std::cout << "——姓名:" << this->name << std::endl; std::cout << "——性别:" << this->sex << std::endl; std::cout << "——年龄:" << this->age << std::endl; std::cout << "————————————" << std::endl;}void Student::Init(std::string name, std::string sex, int age){ std::cout << "--+" << name << "完成初始化" << std::endl; this->name = name; this->sex = sex; this->age = age;}int main(){ Student XiaoMing; // 类实例化时调用无参的构造函数 XiaoMing.Init("小明", "男", 20); // 手动调用初始化函数 Student XiaoHong("小红", "女", 20); // 类实例化时调用有参的构造函数,直接初始化完成 XiaoMing.displayInfos(); // 显示信息 XiaoHong.displayInfos(); return 0;}
编译运行
-++类实例化时,会先调用构造函数+++初始化完成--+小明完成初始化-++类实例化时,会先调用构造函数+++小红初始化完成--+小红完成初始化————学生信息——————姓名:小明——性别:男——年龄:20————————————————学生信息——————姓名:小红——性别:女——年龄:20————————————-++对象销毁时,会调用析构函数+++小红已销毁-++对象销毁时,会调用析构函数+++小明已销毁
可以看到,结构体与类有很大的相似之处,但是类内部允许有函数,并且有默认的构造函数(在类实例化时自动运行,可以重载)和默认的析构函数(对象生命周期结束时自动运行,回收资源)。
最先构造的对象,最后被析构。
类可以看成是一个独立的小程序,作为整个项目的基本机器存在着,我们一般会尽量少在main函数写大量的代码,而是集中到类或者函数中,直接在main函数中调用它们即可。
this直接指向实例化的对象对应的类中成员,在这个例子中用于和传入的外界参数与对象的数据成员区分开来。
返回目录 1 面向对象技术
上一节 1.4 cpp编程基础
下一节 1.6 cpp的常见特性
参考资料:
- 《C++程序设计》传智播客
- 百度百科