结构体类型
C++风格的结构体
#include <iostream>
using namespace std;
#include<string>
struct student
{
private: // 数据是不能让外界直接调用修改的,但可以通过成员函数间接修改调用成员变量
int mark;
string name;
char sex;
public: // 在student定义的作用域内均可调用——由于我们在main函数外部定义的struct变量,因此它的作用域是global
void get_value(int vmark, string vname, char vsex)
{
mark = vmark;
name = vname;
sex = vsex;
}
int out_mark(void)
{
cout << mark << endl;
return 0;
}
};
int main()
{
student Student;
Student.get_value(89, "超级霸霸强", 'f'); // 用公有成员函数简介初始化成员变量
Student.out_mark(); // 调用公有成员函数
}
C++风格的结构体已经与class类型相差无几,但是C语言中的struct类型变量只能存放数据不能再其中定义成员函数。
C++风格的类(class)类型
#include <iostream>
using namespace std;
#include<string>
class student // 仅将struct关键字换为class
{
private: // 数据是不能让外界直接调用修改的,但可以通过成员函数间接修改调用成员变量
int mark;
string name;
char sex;
public: // 在student定义的作用域内均可调用——由于我们在main函数外部定义的struct变量,因此它的作用域是global
void get_value(int vmark, string vname, char vsex)
{
mark = vmark;
name = vname;
sex = vsex;
}
int out_mark(void)
{
cout << mark << endl;
return 0;
}
};
int main()
{
student Student;
Student.get_value(89, "超级霸霸强", 'f'); // 用公有成员函数简介初始化成员变量
Student.out_mark(); // 调用公有成员函数
}
C++风格中结构体类型与类类型的异同点
相同点:在C++中已经对struct进行了扩充,不仅可以声明成员变量,还可以声明成员函数,class关键字本身就是从struct发展而来的,所以struct支持的,class都支持。
不同点:class默认的成员访问限定符是private,struct默认的成员访问限定符是public。
因此struct定义的变量中的成员变量在默认情况下(默认限定符为public),外界可以直接访问修改成员变量的值,而class在默认情况下是使用的private限定符,外界在默认情况下是无法访问调用private所声明的成员函数和成员变量。