文章内容转载自黑马程序员C++核心编程讲义,如有侵权,请联系作者删除
4.1 封装
4.1.1 封装的意义
封装是C++面向对象三大特性之一
封装的意义:
- 将属性和行为作为一个整体,表现生活中的事物
 
- 将属性和行为加以权限控制
 
封装意义一:
 在设计类的时候,属性和行为写在一起,表现事物
语法:
class 类名{   访问权限: 属性  / 行为  };
示例1:设计一个圆类,求圆的周长
示例代码:
 const double PI = 3.14;
 
 
 
 
 
  class Circle { public:  
  	 	int m_r;
  	 	 	double calculateZC() 	{ 		 		 		return  2 * PI * m_r; 	} };
  int main() {
  	 	      	Circle c1; 	c1.m_r = 10; 
  	 	cout << "圆的周长为: " << c1.calculateZC() << endl;
  	system("pause");
  	return 0; }
 
  | 
 
示例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
示例2代码:
 class Student { public: 	void setName(string name) { 		m_name = name; 	} 	void setID(int id) { 		m_id = id; 	}
  	void showStudent() { 		cout << "name:" << m_name << " ID:" << m_id << endl; 	} public: 	string m_name; 	int m_id; };
  int main() {
  	Student stu; 	stu.setName("德玛西亚"); 	stu.setID(250); 	stu.showStudent();
  	system("pause");
  	return 0; }
 
 
  | 
 
封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
- public 公共权限
 
- protected 保护权限
 
- private 私有权限
 
示例:
 
 
 
  class Person { 	 public: 	string m_Name;
  	 protected: 	string m_Car;
  	 private: 	int m_Password;
  public: 	void func() 	{ 		m_Name = "张三"; 		m_Car = "拖拉机"; 		m_Password = 123456; 	} };
  int main() {      	Person p; 	p.m_Name = "李四"; 	 	          p.func()
  	system("pause");
  	return 0; }
 
  | 
 
4.1.2 struct和class区别
在C++中 struct和class唯一的区别就在于
默认的访问权限不同
区别:
- struct 默认权限为公共
 
- class 默认权限为私有
 
class C1 { 	int  m_A;  };
  struct C2 { 	int m_A;   };
  int main() {
  	C1 c1; 	c1.m_A = 10; 
  	C2 c2; 	c2.m_A = 10; 
  	system("pause");
  	return 0; }
   | 
 
4.1.3 成员属性设置为私有
优点1:将所有成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性
示例:
 
 
 
  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) { 			m_Age = 0;              cout << "你个老妖精!" << endl; 			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("张三"); 	cout << "姓名: " << p.getName() << endl;
  	 	p.setAge(50); 	cout << "年龄: " << p.getAge() << endl;
  	 	p.setLover("苍井"); 	
  	system("pause");
  	return 0; }
 
  |