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++程序设计》传智播客
  • 百度百科