初识类(class&struct)
面向对象三大特性:封装、继承和多态。其中不得不谈的就是类,通过类创建一个对象的过程叫实例化,实例化后使用对象可以调用类成员函数和成员变量,其中类成员函数称为行为,类成员变量称为属性。类和对象的关系:类是对象的抽象,对象是类的实例。
1 struct Person{ 2 void setAge(){ 3 age = 10; 4 cout << "age:" << age << endl; 5 } 6 int age; 7 }; 8 9 class Animal{ 10 public: 11 12 void setAge(){ 13 age = 20; 14 cout << "animal age:" << age << endl; 15 } 16 int age; 17 };
从上面的代码中可以看出,在类内或者struct中,可以在定义成员属性前使用它。
其实C++中struct和class中,看起来都是一样的,calss有访问权限,struct同样有三种权限,最本质区别在于:1)默认的继承访问权限。struct是public的,class是private的;2)struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的;3)(这个不是最本质的区别,平时提到的也比较少)“class”这个关键字还用于定义模板参 数,就像“typename”。但关键字“struct”不用于定义模板参数。
当你觉得你要做的更像是一种数据结构的话,那么用struct,如果你要做的更像是一种对象的话,那么用class。还要强调一点的就是,对于访问控制,应该在程序里明确的指出,而不是依靠默认,这是一个良好的习惯,也让你的代码更具可读性。
C/C++封装差异
由于C语言struct不能写函数,因此封装时将属性和行为(姑且这样叫,和C++统一)分开处理,另外函数参数的类型检测不严格,就会导致一些意想不到的情况;C++的参数类型检测严格,且会将属性和行为定义在一起,表示具体的事物。
类成员权限
类的成员有三个权限:公有权限(public),私有权限(private),保护权限(protected)。
私有权限:私有成员在类内部可以访问,类外不可访问,一般推荐将成员变量设置为私有成员;
公有权限:类内类外都可以进行访问;
保护权限:类内和当前类的子类可以访问,类外不可访问。
下面的例子,可以根据三个权限,对对象的属性和行为实现只读,只写等功能。
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 class Animal{ 6 public: 7 //写入myLOve 8 void setLove(string love){ 9 myLove = love; 10 } 11 //读取年龄 12 int readAge(){ 13 return age; 14 } 15 16 //写入名字 17 void setName(string name){ 18 myName = name; 19 } 20 //读取名字 21 string readName(){ 22 return myName; 23 } 24 25 private: 26 string myLove; //只写 27 string myName; //读写 28 int age = 2; //只读 29 }; 30 31 void test(){ 32 Animal animal; 33 34 int age = animal.readAge(); 35 animal.setName("傻猫"); 36 string name = animal.readName(); 37 animal.setLove("小二黑"); 38 cout << name << "今年" << age << "岁" << endl; 39 } 40 41 int main(){ 42 43 test(); 44 system("pause"); 45 return 0; 46 }