共计 2370 个字符,预计需要花费 6 分钟才能阅读完成。
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++ 程序设计》传智播客
- 百度百科
正文完