C++系列-类和对象-封装

这篇具有很好参考价值的文章主要介绍了C++系列-类和对象-封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++面向对象的三大特征

  • 封装
  • 继承
  • 多态

封装-类

  • 具有相同性质的对象可以抽象为类,可以有属性,行为
  • 类中的属性和行为统一称作成员
  • 属性:成员变量,成员属性
  • 行为:成员函数,成员方法
#include<iostream>
using namespace std;
const double PI = 3.14;
class Circle
{
public:				// 访问权限
	int r;			// 属性
	double cal_c()	// 行为
	{
		return 2 * PI * r;
	}
};

void main()
{
	Circle c1;		// 实例化一个对象, 通过类创建对象的过程
	c1.r = 5;
	double c = c1.cal_c();
	cout << c << endl;
	system("pause");
}
#include<iostream>
using namespace std;
class Student
{
public:						// 访问权限
	// 属性
	string name;			
	int id;
	// 行为
	void show_name()
	{
		cout << name << endl;
	}
	void show_id()
	{
		cout << id << endl;
	}
};

void main()
{
	Student s1;		// 实例化一个对象
	s1.name = "Zhangsan";
	s1.id = 20;
	s1.show_name();
	s1.show_id();
	system("pause");
}

封装-访问权限

  • public
    –成员在类内可以访问,在内外也可以访问
  • protected
    –成员在类内可以访问,在内外不可以访问,子类可以访问
  • private
    –成员在类内可以访问,在内外不可以访问,子类不可以访问
code:
	#include<iostream>
	using namespace std;
	class Person
	{
	public:						// 访问权限
		string name;			// 属性
	protected:
		string car;
	private:
		int password;
	public:
		void set_info(string ref_name, string ref_car, int ref_password)
		{
			// 几种权限内类都可以访问
			name = ref_name;			
			car = ref_car;
			password = ref_password;
		}
		void show_info()
		{
			cout << name << "_" <<  car << "_"  <<  password << endl;
		}
	};
	
	void main()
	{
		Person p1;
		p1.set_info("Lili", "BMW", 666888);
		p1.show_info();
	
		p1.name = "HanMeimei";
		//p1.car = "BENZ";			// protected权限类外不能访问
		//p1.password = 333;		// private权限类外不能访问
		p1.show_info();
		p1.set_info("GuTianle", "Volvo", 123456);		// 可以通过public的成员方法改变protected和private权限的成员变量
		p1.show_info();
		system("pause");
	}
result:
	Lili_BMW_666888
	HanMeimei_BMW_666888
	GuTianle_Volvo_123456

封装-struct和class的区别

  • struct和class的默认访问权限不同。
    – struct默认访问权限是public。
    – class默认访问权限是private。
#include<iostream>
using namespace std;
class Person_c
{
	string name;			// 默认访问权限是private
	void show_info()
	{
		cout << name << endl;
	}
};

struct Person_s
{
	string name;			// 默认访问权限是public
	void show_info()
	{
		cout << name << endl;
	}
};

void main()
{
	Person_c pc1;
	// 类的默认访问权限是private,所以成员变量和函数在类外不能访问
	// pc1.name = "LiuDehua";		
	// pc1.show_info();
	// struct的默认访问权限是public,所以成员变量和函数在类外可以访问
	Person_s ps1;
	ps1.name = "Libai";
	ps1.show_info();
	system("pause");
}

封装-成员属性私有化

  • 成员属性设置为私有,可以控制其读写权限
  • 对于写权限,可以检测数据有效性
#include<iostream>
using namespace std;
class Person
{
private:
	string name;			// 默认访问权限是private
	int age = 0;

public:
	void set_info(string ref_name, int ref_age)
	{
		name = ref_name;
		if (ref_age < 0 || ref_age > 150)
		{
			cout << "这是个妖怪!" << endl;
			return;
		}
		age = ref_age;
	}
	void show_info()
	{
		cout << name << "_" << age << endl;
	}
};

void main()
{
	Person p1;
	p1.set_info("Libai", 180);
	p1.show_info();
	system("pause");
}

封装-成员变量为类

#include<iostream>
using namespace std;
class Point
{
private:
	int pos_x;
	int pos_y;
	
public:
	void set_info(int ref_x, int ref_y)
	{
		pos_x = ref_x;
		pos_y = ref_y;
	}
	void get_info(int &x, int& y)
	{
		x = pos_x;
		y = pos_y;
	}
};

class Circle
{
private:
	Point center;
	int radius;
public:
	void set_info(Point ref_center, int ref_radius)
	{
		center = ref_center;
		radius = ref_radius;
	}
	void get_info(int& ret_center_x, int& ret_center_y, int& ret_radius)
	{
		center.get_info(ret_center_x, ret_center_y);
		ret_radius = radius;
	}
};

void is_incricle(Circle& c, Point& p)
{
	int c_x, c_y, c_r;
	c.get_info(c_x, c_y, c_r);
	int p_x, p_y;
	p.get_info(p_x, p_y);
	int dis = (p_x - c_x) * (p_x - c_x) + (p_y - c_y) * (p_y - c_y);
	if (dis > (c_r * c_r))
		cout << "点在圆外" << endl;
	else if (dis == (c_r * c_r))
		cout << "点在圆上" << endl;
	else
		cout << "点在圆内" << endl;
}
void main()
{
	Point p1;
	p1.set_info(10, 9);
	int p_x, p_y;
	p1.get_info(p_x, p_y);
	cout << "点的坐标是:" << "x=" << p_x << " y=" << p_y << endl;

	Point p2;
	p2.set_info(10, 0);
	Circle c1;
	c1.set_info(p2, 10);

	int x, y, r;
	c1.get_info(x, y, r);
	cout << "圆的坐标是:" << "x=" << x << " y=" << y << " r=" << r << endl;
	is_incricle(c1, p1);
	system("pause");
}

封装-将类置于单独的文件中

poin.h文件
#pragma once
#include<iostream>
using namespace std;
// 在头文件中写上成员变量和成员函数的声明即可
class Point
{
private:
	int pos_x;
	int pos_y;

public:
	void set_info(int ref_x, int ref_y);
	void get_info(int& x, int& y);
};
poin.cpp文件
#include"point.h"
// 所有成员函数的实现放在源文件中,并说明函数的作用域
void Point::set_info(int ref_x, int ref_y)
{
	pos_x = ref_x;
	pos_y = ref_y;
}
void Point::get_info(int& x, int& y)
{
	x = pos_x;
	y = pos_y;
}
circle.h文件
#pragma once
#include<iostream>
using namespace std;
#include"point.h"
class Circle
{
private:
	Point center;
	int radius;
public:
	void set_info(Point ref_center, int ref_radius);
	void get_info(int& ret_center_x, int& ret_center_y, int& ret_radius);
};
circle.cpp文件
#include"circle.h"
void Circle::set_info(Point ref_center, int ref_radius)
{
	center = ref_center;
	radius = ref_radius;
}
void Circle::get_info(int& ret_center_x, int& ret_center_y, int& ret_radius)
{
	center.get_info(ret_center_x, ret_center_y);
	ret_radius = radius;
}

文章来源地址https://www.toymoban.com/news/detail-661138.html

到了这里,关于C++系列-类和对象-封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++核心编程—类和对象,类的三大特性——封装、继承、多态

    纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 ①什么是对象? 生活中有各种各样的 事物 ,如人、动物、植物等在C++中将这些称为对象。 对象多种多样, 各种对象的属性也不相同 。 例如狗的品种,毛色,年龄等 各个对象都有自己的行为 ,例

    2024年02月07日
    浏览(62)
  • 【C++】类和对象 - 封装 - 属性和行为,访问权限,class 和 struct区别,成员属性私有化

    No. Contents 1 【C++】基础知识 - HelloWorld,注释,变量,常量,,标识符 2 【C++】数据类型 - 整型,sizeof,实型,字符型,转义字符,字符串类型,布尔类型,数据的输入 3 【C++】运算符 - 算术运算符,赋值运算符,比较运算符,逻辑运算符 4 【C++】程序流程结构 - 循序结

    2024年02月07日
    浏览(47)
  • 重生学c++系列第三课类和对象(上)

        好的我们重生c++系列的前两期已经介绍完了c++祖师爷针对C语言补充的几个新功能,现在我们进入c++的真正课题学习—— 类与对象:      C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。     比如说我们洗菜做饭,C语言关注的是

    2024年02月14日
    浏览(47)
  • 【C++初阶】三、类和对象(面向过程、class类、类的访问限定符和封装、类的实例化、类对象模型、this指针)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【C++初阶】二、入门知识讲解 (引用、内联函数、auto、基于范围的for循环、指针空值

    2024年02月04日
    浏览(38)
  • 【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)

    🔥 个人主页 : Forcible Bug Maker 🔥 专栏 : C++ 目录 前言 什么是面向对象? 类的定义 类的访问限定符及封装 访问限定符 封装 类的作用域 类的实例化 类对象的存储方式 this指针 结语 最早的C++版本(C with classes)中,最先加上的就是类的机制,它构成了面向对象编程(OOP)的

    2024年04月14日
    浏览(54)
  • 【Java】类和对象,封装

    目录 1.类和对象的定义  2.new 3.this引用 4.对象的构造及初始化 5.封装 //包的概念 //如何访问 6.static成员 7.代码块 8.对象的打印 对象:Java中一切皆对象。 类:一般情况下一个Java文件一个类,每一个类对应一个字节码文件(*.class)        1)字段 / 属性 / 成员变量:定

    2024年02月02日
    浏览(42)
  • Python-面向对象:面向对象、成员方法 、类和对象、构造方法、魔术方法、封装、继承、类型注解、多态(抽象类(接口))

    当前版本号[20230806]。 版本 修改说明 20230806 初版 生活中数据的组织 学校开学,要求学生填写自己的基础信息,一人发一张白纸,让学生自己填, 易出现内容混乱 但当改为登记表,打印出来让学生自行填写, 就会整洁明了 程序中数据的组织 在程序中简单使用变量来记录学

    2024年02月14日
    浏览(49)
  • <C++> 类和对象-面向对象

    C语言是 面向过程 的,关注的是过程,分析出求解问题的步骤, 通过函数调用逐步解决问题。 C++是基于 面向对象 的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函

    2024年02月14日
    浏览(44)
  • <C++> 类和对象(上)-面向对象

    C语言是 面向过程 的,关注的是过程,分析出求解问题的步骤, 通过函数调用逐步解决问题。 C++是基于 面向对象 的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函

    2024年02月11日
    浏览(50)
  • C++——类和对象(2)

    当一个类中什么都没有,编译器会帮类自动生成6个默认成员函数例如: 此篇文章主要围绕构造函数与析构函数进行讲解。  对于以上的Date类,每次实例化对象之后都要对对象调用Init()函数,比较繁琐,其实编译器就可以帮我们完成。 构造函数是一个特殊的成员函数,名字与

    2024年03月17日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包