类是一群具有相同的属性和行为的一组对象的集合。类和结构体一样,也是一种数据类型,类中包含了成员属性和成员函数。
多种说法:属性——成员属性——成员变量
行为——成员函数——成员方法
下面以两个例子理解类。
//定义圆类Circle求圆的周长 const double PI = 3.14; class Circle { public: int m_r;//属性 double CircleZC() { //行为 (成员函数的实现在类声明的内部) return 2 * PI * m_r; }; }; int main() { Circle c1;//实例化(通过类创建对象) c1.m_r = 10;//对圆对象的属性赋值 cout << "圆的周长为:" << c1.CircleZC(); }
对于以上这种成员函数的实现只有两三行代码的可以在类的内部,对于成员函数功能复杂的一般放在外部使得程序逻辑更清晰,便于维护和修改,如下面的例子。
//定义学生类Student,类中有数据成员学号、姓名、3门课的成绩, //实现学生信息的输入和求平均值 class Student { private: int Id; string name; float score[3]; public: void setedata(); float ave(); void print(); }; //成员函数的实现 void Student::setedata() { cout << "请输入学生的学号:"; cin >> Id; cout << "请输入学生的姓名:"; cin >> name; cout << "请输入学生的3门课成绩:"; cin >> score[0]>> score[1] >> score[2] ; } float Student::ave() { return (score[0] + score[1] + score[2]) / 3; } int main() { Student stu; // 输入学生信息 stu.setedata(); // 计算平均成绩 float average = stu.ave(); // 打印学生信息和平均成绩 stu.print(); cout << "平均成绩:" << average << endl; return 0; }
1、控制读写权限
2、对写权限检测数据有效性
如下面的边长自身设置为私有无法修改,在公有权限中设置获取权限可以控制用户的读写。
/设置正方体类求面积和体积 class Cube { private: int c_length; public: //获取长度 void setelengh(int length) { c_length = length; } int getlength() { return c_length; } int calculatesize() { return 6 * pow(c_length, 2); } int calculatevolumn() { return pow(c_length, 3); } }; int main() { Cube c1; c1.setelengh(10); cout << c1.calculatesize()<进一步我们分别添加全局函数和成员函数判断两个正方体是否相等。需要注意的是各自传参的数目。
//分别利用全局函数和成员函数判断两个正方体是否相等 class Cube { private: int c_length; public: //获取长度 void setelengh(int length) { c_length = length; } int getlength() { return c_length; } int calculatesize() { return 6 * pow(c_length, 2); } int calculatevolumn() { return pow(c_length, 3); } //利用成员函数判断,只需传一个参数 bool class_is_same(Cube& c) { if (c_length == c.getlength())//类中私有成员属性可以直接访问 return true; return false; } }; //利用全局函数判断 bool is_same(Cube& c1, Cube& c2) { if (c1.getlength() == c2.getlength()) return true; return false; } int main() { Cube c1; c1.setelengh(10); Cube c2; c2.setelengh(11); cout << c1.calculatesize() << endl; cout << c1.calculatevolumn(); //全局函数判断 bool res1 = is_same(c1, c2); if (res1) { cout << "c1和c2是相等的" << endl; } cout << "c1和c2是不相等的" << endl; //成员函数判断 //bool res2 = class_is_same(c1, c2); //if (res2) { // cout << "c1和c2是相等的" << endl; //} //cout << "c1和c2是不相等的" << endl; }