上一篇 自定义类型 struct/class(类、对象与成员变量)
从面向对象的角度来说,修改类的成员变量应该是类自己的事情,用户不应该直接访问类的成员变量,而应该通过类提供的成员函数类访问。

像下面这样:
#include<iostream>
using namespace std;
//类的外部
struct Student
{//左花括号之后:类的内部(开始的地方)
public://这一行之后的代码都对类的外部公开,可以在main函数,或者其他函数内部访问下面的内容
//成员函数的一对花括号内部也是类的内部
long get_id(void) { return m_id; }//类的成员函数 get_id
int get_age(void) { return m_age; }//类的成函数get_age
void set_id(long long id) { m_id = id; }//类的成员函数set_id
void set_age(int age) { m_age = age; }//类的成员函数set_age
private://这一行之后的代码都不对类的外部公开,不可以在main函数,或者其他函数内部访问下面的内容
long m_id;//类的成员变量m_id
int m_age;//类的成员变量m_age
//右花括号之前:类的内部(结束的地方)
};
//类的外部
//测试类对象在函数中使用是,哪些成员可以被访问
//这里也是类的外部
void test_class_fun(void)
{//这里也是类的外部
Student stu;
stu.get_age();//可以访问类的public成员
//stu.m_age;//错误:编译不通过! 类的外部不可以访问类的private成员!
//这里也是类的外部
}
int main()
{//这里也是类的外部
Student stu_zhang_san;
stu_zhang_san.set_id(2022092345);//这里是类的外部,可以访问public成员函数set_id
stu_zhang_san.set_age(20);//这里是类的外部,可以访问public成员函数set_age
//类的外部,可以访问类的public成员函数get_id 和 get_age
cout << "student infor : id=" << stu_zhang_san.get_id() << " age=" << stu_zhang_san.get_age();
//测试类对象在函数中使用是,哪些成员可以被访问
test_class_fun();
return 0;
//这里也是类的外部
}
程序输出如下:
说明:
上面代码中的public:表示公开类的成员,也就是让getid() get_age() setid() set_age()这几个函数可以被类的使用者访问。
上面代码中的private:表示不公开类的成员,也就是让类的使用者不能访问mid m_age这两个成员变量。
所以在main函数中,以及在test_class_fun函数中,都只能通过Student类的成员函数来读写学生的信息。