类和对象(2)—— 类的封装和访问控制
1、从struct说起
当单一变量无法完成描述需求的时候,结构体类型解决了这一问题。可以将多个类型打包成一体,形成新的类型。这是 c 语言中封装的概念。
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std;struct Data {int year;int month;int day; };void init(Data &d) {cout << "year,mouth,day:" << endl;cin >> d.year >> d.month >> d.day; }void print(Data &d) {cout << "year:mouth:day:" << endl;cout << d.year<<":" << d.month << ":" << d.day << endl; }bool isLeapYear(Data &d) {if ((d.year % 4 == 0 && d.year != 0) || d.year % 400 == 0)return true;elsereturn false; } int main(void) {Data d;init(d);print(d);if (isLeapYear(d))cout << "leap year" << endl;elsecout << "not leap year" << endl;return 0; }
对C语言中结构体的操作,都是通过外部函数来实现的。比如
void init(Data &d) void print(Data &d) bool isLeapYear(Data &d)
2、封装的访问属性
- struct 中所有行为和属性都是 public 的(默认)。C++中的 class 可以指定行为和属性的访问方式。
- 封装,可以达到对内开放数据、对外屏蔽数据、对外提供接口,达到了信息隐蔽的功能。
- 比如我们用 struct 封装的类,即知其接口,又可以直接访问其内部数据,这样却没有达到信息隐蔽的功效。而 class 则提供了这样的功能,屏蔽内部数据,对外开放接口。
3、用class去封装带行为的类
class 封装的本质,在于将数据和行为,绑定在一起然后能过对象来完成操作。
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std;class Data { //一个类的内部,默认的访问控制权限是private public:void init(){cout << "year,mouth,day:" << endl;cin >> year >> month >> day;}void print(){cout << "year:mouth:day:" << endl;cout << year << ":" << month << ":" << day << endl;}bool isLeapYear(){if ((year % 4 == 0 && year != 0) || year % 400 == 0)return true;elsereturn false;}int get_year(){return year;}void set_year(int new_year){year = new_year;} private:int year;int month;int day; }; int main(void) {Data d;d.init();d.print();if (d.isLeapYear())cout << "leap year" << endl;elsecout << "not leap year" << endl;//getter,settercout << d.get_year() << endl;d.set_year(2018);cout << d.get_year() << endl;return 0; }//C++中结构体和类的功能是一样的,在C++中将结构体升级了,结构体的方式就是一个类, //区别是默认的访问控制权限是不同的, //结构体struct默认为public,类class默认为private; //结构体没有成员方法,只能通过函数指针解决问题;
或者写成:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std;class Data { //一个类的内部,默认的访问控制权限是private public:void init();void print();bool isLeapYear();int get_year();void set_year(int new_year); private:int year;int month;int day; };void Data::init() {cout << "year,mouth,day:" << endl;cin >> year >> month >> day; }void Data::print() {cout << "year:mouth:day:" << endl;cout << year << ":" << month << ":" << day << endl; }bool Data::isLeapYear() {if ((year % 4 == 0 && year != 0) || year % 400 == 0)return true;elsereturn false; }int Data::get_year() {return year; }void Data::set_year(int new_year) {year = new_year; } int main(void) {Data d;d.init();d.print();if (d.isLeapYear())cout << "leap year" << endl;elsecout << "not leap year" << endl;//getter,settercout << d.get_year() << endl;d.set_year(2018);cout << d.get_year() << endl;return 0; }
- Data 类 访问自己的成员,可以不需要传引用的方式;
- 封装有2层含义(把属性和方法进行封装 对属性和方法进行访问控制);
- Public修饰成员变量和成员函数可以在类的内部和类的外部被访问;
- private修饰成员变量和成员函数只能在类的内部被访问。
struct和class关键字区别:
在用struct定义类时,所有成员的默认属性为public;
在用class定义类时,所有成员的默认属性为private。
转载于:https://www.cnblogs.com/yuehouse/p/9787668.html
类和对象(2)—— 类的封装和访问控制相关推荐
- java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...
0 前言 初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类.对象.重载.封装.继承.多态.覆盖.抽象类.接口概念.为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定 ...
- php函数、类和对象以及类的封装、继承、类的静态方法、静态属性
php函数.类和对象以及类的封装.继承.类的静态方法.静态属性 原文:php函数.类和对象以及类的封装.继承.类的静态方法.静态属性 1.函数 php内置函数可以直接使用,如果没有安装php扩展即可 ...
- java类与对象_Java类与对象
类与对象 1,面向对象编程简介 Java语言最大的特点在于面向对象的编程设计,并且面向对象的编程设计也在由于Java自身的发展而不断发展.面向过程编程(C语言).函数式编程(Scala).面向对象编程 ...
- c++类和对象(类的概念)
1.类和对象概念 类:用来对实体(对象)进行描述,对象有什么属性,以及对象具有什么功能是一种自定义类型 对象:现实生活中所存在的 ,对象是对类的具体体现 用类类型创建出来的变量称为对象 2.类的定义 ...
- 实验四 类和对象;类的继承和派生;多态性; 接口;构造器应用
实验四 类和对象:类的继承和派生:多态性: 接口:构造器应用 一.实验目的 1. 掌握类与对象的关系: 2. 掌握类的定义: 3. 掌握对象的声明及使用: 4. 掌握构造方法的概念及调用时机: 5. ...
- C++ 类与对象_类的其他成员(常成员,静态成员,友元)
系列文章目录 重新复习c++,所以把书中的重点内容整理成博客,尽量简洁,易懂. C++ 类与对象_类和对象的定义与访问 (定义类和对象,访问对象成员,this指针) C++ 类与对象_构造函数和析构函 ...
- mysql构造器_类和对象,类的构造器,魔术方法__get()和__set(),mysql连接数据库的方式--2018年8月30日11时38分...
这一节课主要讲的是类和数据库的知识,主要是类和对象,类的构造器,魔术方法__get()和__set(),mysql连接数据库1. 什么是类 ?什么是对象?举例说明 答:类是对象的模板,对象是类的一个实 ...
- 3-1:类与对象入门——类的引入和类的定义以及访问限定符和封装还有对面向对象的理解
文章目录 一:面向对象与面向过程 二:类的引入 三:类的定义 (1)C++类的定义 (2)类的两种定义方式 A:声明和定义全部放在类体中 B:定义和声明分开放 四:类的访问限定符及封装 (1)访问限定 ...
- 基于类和对象的高精度算法封装
hi 这是使用类和对象的高精度计算封装实现,这能够进行面向对象的高精度计算编程. #include<iostream> #include<cstring> using name ...
- [Java] 类和对象(简介,封装,内存机制,构造方法)
文章目录 1 面向对象思想 1.1面向对象的思想概述 举例 特点 1.2 类和对象 类 对象 类和对象的关系 1.3 类的定义 1.4 对象的创建以及使用 1.5 对象的内存 1.6 类作为参数 注意 ...
最新文章
- Graph Embedding学习笔记(3):Graph Convolution Networks
- 成功解决pyinstaller打包scipy是报模块dll缺失和failed to import any qt binding的问题
- 程序员面试题精选100题(21)-左旋转字符串[算法]
- 在VS中进行对项目进行编译出现不能编译的问题
- JavaScript在内层循环中断外层循环
- transformer学习
- 【体验】Silverlight 2.0 多图
- ug区域轮廓铣没有重叠距离_UG加工基本操作
- Android开发中的全屏背景显示方案
- [MSDN]Design Guidelines for Developing Class Libraries with .NET Framework 4
- uniapp —— 实现左右联动商品分类页面
- 问卷与量表数据分析(SPSS+AMOS)学习笔记(一) :问卷分析的流程
- html全部颜色代码大全,html代码大全(基础使用代码)(颜色代码完整版)
- html的过渡属性,CSS3中的元素过渡属性transition解析
- oracle11g shrink,shrink lob
- 在线工具:电脑怎么提取图片中的文字?图片如何转化为文字?
- CSP 201803-4 棋局评估
- CMS和G1的对比分析
- 如何看待2022年秋招Java后端开发岗一片红海?
- 虚拟土地价格暴跌85% 房地产泡沫破裂?依托炒作的暴富游戏需谨慎参与