初识类(class&struct)及C/C++封装的差异

初识类(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 }
原文地址:https://www.cnblogs.com/qinguoyi/p/10214797.html