你的c++学习路上明灯
这一章作为一个先驱章节,这一个学好了以后,才能有后面的基础,不然学后面的东西会感觉很吃力的哦。
c++认为万事万物都可以看作对象,而对象又有其属性和行为。
具有相同性质的对象,我们可以抽象称为类。
#1.封装的意义
##1,将属性和行为作为一个整体
如何封装?
class 类名{访问权限,属性,行为(一般用函数来表示)}
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; const double PI = 3.14; //建立一个圆类 class Circle { //访问权限: public: //属性 int r; //行为:一般用函数来实现 double calZC() { return 2 * PI * r; } }; int main() { //通过圆类来创建一个变量 //实例化:通过一个类,创建一个对象的过程。 Circle c1; //初始化圆类 c1.r = 10; cout << "圆的周长为:" << c1.calZC() << endl; return 0; }
##2,将属性和行为加以权限访问
类在设计时,可以把属性和行为放在不同的权限下加以控制
public | 公共权限 | 类内类外都能访问 |
private | 私有权限 | 类内可以,类外不行 |
protected | 保护权限 | 类内可以,类外不行 |
这个时候,有人可能会想到struct,
其实struct也算一个类,它的访问权限默认为public而已
而,class的默认访问权限为私有权限
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; class c1 { int a; }c; struct c2 { int a; }c4; int main() { //c.a = 10; class类默认权限为私有权限 c4.a = 20;//struct结构体默认权限为公共权限,其实结构体也是属于一种类 cout << "a = " << c4.a<< endl; return 0; }
##3,实例化:通过一个类,创建一个对象的过程。
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<string> using namespace std; //设计一个学生类,属性有姓名和学号,可以展示学生的姓名和学号 class student { public: string name; int num; void print() { cout << name << endl; cout << num << endl; //cout<<name<<endl<<num<<endl; } }; int main() { student s; cin >> s.name; cin >> s.num; s.print(); return 0; } #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<string> using namespace std; //设计一个学生类,属性有姓名和学号,可以展示学生的姓名和学号 class student { public: string name; int num; //通过行为来给属性赋值; void setname(string Name) { name = Name; } void setnum(int Num) { num = Num; } void print() { cout << name << endl; cout << num << endl; //cout<<name<<endl<<num<<endl; } }; int main() { student s; s.setname("zhangsan"); s.setnum(20); s.print(); return 0; }
#2.成员属性私有化
我们在创建类的时候,尽量将成员属性私有化,因为
1,可以自己控制读写权限
2,对只写权限,我们可以检测数据的有效性(不能让用户修改程序,即用户不能访问内部程序,以防用户进行非法操作)
#define _CRT_SECURE_NO_WARNINGS 1 #include<string> #include<iostream> using namespace std; class person { public: string name; protected: string car; private: int password; private: //在类内都能访问 void func() { name = "zhangsan"; car = "奔驰"; password = 1234; } }; int main() { person p; p.name = "lisi"; }
#define _CRT_SECURE_NO_WARNINGS 1 #include<string> #include<iostream> using namespace std; //成员属性私有化 class person { //由于属性私有化了,那么就需要一个接口,用来链接类内和类外 public: //姓名设置可读可写 void setname(string name) { m_name = name; } string getname() { return m_name; } //获取年龄 int getage() { return m_age; } //设置年龄 //如果将属性私有化,对于写权限,我们可以检测数据的有效性 //这个步骤不能由用户来完成,只能由程序员在内部完成,只有私有 //权限 ,才能对写的操作进行限制,不然的话,容易产生无效信息 void setage(int age) { if (age < 0 || age>150) { cout << "你是人是鬼?" << endl; m_age = 0; return; } m_age = age; } //情人设置为只写 void setlover(string lover) { m_lover = lover; } //属性全部设为私有权限,可以由程序员自己控制读写权限 private: string m_name; int m_age; string m_lover; }; int main() { person p; p.setname("zhangsan"); cout <<"姓名:" << p.getname() << endl; p.setage(30); cout <<"年龄:" << p.getage() << endl; p.setlover("lisi"); return 0; }
#3.例题:立方体类的设计
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; //立方体类的设计 //创建立方体类 // 设计属性 // 设计行为。获取立方体面积和体积 //分别利用全局函数和成员函数判断两个立方体是否相等 class Cube { private: int m_L; int m_H; int m_W; public: //长 void setL(int l) { m_L = l; } int getL() { return m_L; } //高 void setH(int h) { m_H = h; } int getH() { return m_H; } //宽 void setW(int w) { m_W = w; } int getW() { return m_W; } //面积 int s() { return 2 * (m_L * m_W + m_L * m_H + m_H * m_W); } //体积 int v() { return m_L *m_W* m_H; } //这两个函数可以不传参,因为在类内,可以访问到私有权限内的成员,直接调用就行了 }; int main() { //操作 return 0; }
这只是一个引子,所以并不难,也就一点东西,但是一定是要打一遍的哈,看完这个以后,再去看看下一章,下一章才是重点所在。