初识类(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 #include2 #include 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 }