类与对象——封装

封装是c++面向对象的三大特性之一

将事物的属性行为进行集合,并且可以随时进行权限管理

语法class 类名{使用权限:属性/行为};

  1. 封装的意义:设计时将事物的属性行为放置一块
    1. 使用权限
      • public:公开属性,类外类内均可访问,理解为家的大门?所有人都可以接触
      • protected:保护属性,类外如果不是友元以外均不可以访问
      • private:私有属性,除了友元可以访问,其余类外不可以,连继承的对象也不可以,理解为个人的隐私?
    2. 属性
      • 事物的特性,比如人的名字、年龄、家庭住址,或者一个物体的长宽高等等
    3. 行为
      • 对于属性的一些处理或者其他的函数形式,比如数值的加法运算、输出特定的语言内容
使用类来完成一个圆的周长、面积的运算

定义这个圆的相关属性
class Circle{
public:
	//完成用户的数值的输入
	void setR(string r){
		m_R=r;
	}
double getLength(){
//m_R的数值已经被设置为用户输入的数值r
		return 2*3.14*m_R;
	}
	
//属性
public:
	int m_R;
}

当调用函数时,应为
void test(){
	Circle c;//创建对象c
	c.setR(10);//让c的圆周长为10
	cout<<c.getLength<<endl;//输出周长计算数值
}
  1. 封装的意义:便于对对象的属性的管理
    1. public 公共权限 类内可以访问 类外可以访问
    2. protected 保护权限 类内可以访问 类外不可以访问
    3. private 私有权限 类内可以访问 类外不可以访问

下面通过代码来简单理解一下这些权限

#include <bits/stdc++.h>
using namespace std;

class Person{
	//Person的属性
public:
	string name;
protected:
	string phonenum;
private:
	string address;
	
public:
	//设置属性数值
	void func(){
		name="小明";
		phonenum="123456";
		address="幸福坝";
	}
};

//测试权限
void test(){
	Person p;
	cout<<p.name<<endl;//输出p的名字
//	cout<<p.address<<endl;	protected属性类外不是友元访问不到	 
//	cout<<p.phonenum<endl;	private也同理,此时不注释掉编译器会报错
}
  1. class与struct的区别

在学习c语言的时候我们接触到结构体,也是类似的,将一个事物的多个属性集中一块,用一个struct进行代表,然后使用子属性进行操作,这样大大提高了逻辑性以及减少了代码的臃肿性质.
但是struct的权限默认全部为public属性,里面的属性全部可以访问到

相比之下使用class可以不仅存储一个事务的多种属性,以及同时对于事务属性的操作权限进行控制,比如设置类对象的隐私信息等等

  • struct默认属性全为public权限
  • class默认属性全为private权限
  1. 成员属性的权限设置

这里我用private权限进行一个举例子

#include <bits/stdc++.h>
using namespace std;

class Person{
public:
	//姓名设置成可读可写
	//输入名字
	void setName(string name){
		m_Name=name;
	}
	//读出名字
	void getName(){
		cout<<"姓名为"<<m_Name<<endl;
	}
	
	//年龄设置只写不读
	void setAge(int age){
		m_Age=age;
	}
	//此时如果去掉注释,编译器会报错,说m_Age未在此处声明,因为m_Age为private变,所以不能进行返回,只能设置不能读出
	/*
		int getAge(){
			return m_Age;
		}
	*/
public:
	string m_Name;
private:
	in m_Age;
};

void test(){
	Person p;
	p.setName("陶笛");//设置名字为陶笛
	p.getName();//输出名字
	p.setAge(20);//设置年龄为20岁
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 面向对象的程序设计分为两种,一种是基于类的,另一种是基于原型的。其中基于类的程序设计是最常见的一种,它主要涉及到两个概念,即类和对象。类是一个抽象的概念,它描述了一类具有相同属性和方法的对象,而对象则是具体的实例。在基于类的程序设计中,类用于描述对象的属性和方法,而对象则是类的具体实现。因此,基于类的程序设计更注重对象的封装、继承和多态等概念。 ### 回答2: 面向对象编程是一种程序设计范式,它把程序看作是一组对象的集合,每个对象都有一个特定的属性和方法。在Python中,每个对象都是一个类的实例,类是一个抽象的概念,用于表示一组相似的对象。对象是类的实例,它继承了类的属性和方法,同时可以拥有自己的属性和方法。 在Python中,类定义的语法为: class ClassName: # 属性和方法 在类定义中,可以定义属性和方法,类的属性是一些数据,用来描述类的特征;类的方法是一些函数,用来描述类的行为。同时,类还可以继承其他类的属性和方法,通过继承,子类可以重用父类的代码,同时也可以增加自己的属性和方法。 在Python中,对象的创建和使用的语法为: object_name = ClassName() 在对象的创建过程中,会调用类的构造函数(__init__()方法),用来初始化对象的属性和方法。然后,可以使用对象的属性和方法来完成具体的任务。 在面向对象编程中,有三个重要的概念,分别是封装、继承和多态。封装是指把数据和行为包装在一个类中,对外部隐藏具体的实现细节;继承是指子类可以继承父类的属性和方法,在子类中可以重写父类的方法和添加自己的方法;多态是指同一个方法可以在不同的对象上产生不同的结果,通过实现多态,程序可以更加灵活和可扩展。 最后,在Python中,还可以通过__str__()方法来自定义对象的字符串表示方式,方便输出和调试。同时,还可以通过@property和@setter装饰器来实现属性的封装和保护。 总之,类和对象是面向对象编程的基础,它提供了一种更加灵活和可扩展的编程方式,同时也对程序的设计和架构提出了更高的要求。因此,熟练掌握类和对象的相关知识,是Python编程的基础和必备技能。 ### 回答3: Python中的面向对象编程(Object-Oriented Programming,OOP)是一种将数据和行为封装在一起,以创建对象为中心的思想。在Python中,一切皆为对象,从简单的数字、字符串到复杂的列表、元组都是对象。面向对象(Object-Oriented)编程中最基本的两个概念是类和对象。 类是一种数据类型,是一组相关数据和方法的描述。其实就是一个对象的模板,包含了它所描述的对象共有的属性和方法。Python中定义类的方法比较简单,使用关键字`class`即可,例如: ```python class Dog: def __init__(self, name, age): self.name = name self.age = age def bark(self): print("汪汪!") ``` 上述代码定义了一个Dog类,包含了Dog对象共有的属性(name和age)和方法(bark)。通过关键字`def`定义Dog类的方法,其中`__init__`方法是一个特殊的方法,用于初始化类的对象属性。 当我们需要使用Dog类时,需要将它实例化为一个对象。例如: ```python dog1 = Dog("小黑", 3) dog1.bark() # 输出:汪汪! ``` 上述代码创建了一个Dog对象,设置了它的name为“小黑”,age为3,然后调用了Dog类的方法bark。 另外,Python中还有一些内置函数,可以用于操作类和对象。例如: - `type`函数:用于返回对象的类型。使用方法为`type(object)` - `isinstance`函数:用于检查对象是否为指定类的实例。使用方法为`isinstance(object, classinfo)` - `hasattr`函数:用于检查对象是否具有指定的属性。使用方法为`hasattr(object, name)` - `getattr`函数:用于获取对象的属性值。使用方法为`getattr(object, name[, default])` - `setattr`函数:用于设置对象的属性值。使用方法为`setattr(object, name, value)` 以上是Python中定义类和使用类的基本语法和函数,掌握了这些知识后,可以尝试设计自己的类并应用到实际的编程项目中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值