c/c++教程 - 2.4.1 类和对象,封装,class和struct的区别,成员属性设为私有,类拆分成.h.c文件编写方法
目录
4. 类和对象
4.1 封装
4.1.1 封装的意义
4.1.2 class和struct的区别
4.1.3 成员属性设置为私有
4.1.4 类拆分成.h.c编写方法
相关教程
4. 类和对象
- C++面向对象的三大特征为:封装、继承、多态
C++认为万事万物皆为对象,对象有其属性和行为。
例如:
人可以作为对象,属性有姓名、年龄、身高、体重...,行为有走、跑、跳、吃饭...
车也可以作为对象,属性有轮胎、方向盘、车灯...,行为有载人、放音乐、开空调...
4.1 封装
封装是C++面向对象三大特征之一。
4.1.1 封装的意义
封装的意义:
- 将属性和行为作为一个整体,表现生活中的事物。
- 将属性和行为加以权限控制。
封装的意义一:在设计类的时候,属性和行为写在一起,表现事物。
语法:
class 类名 { 访问权限: 属性 / 行为 };
C++封装一些名词:
- 类中的属性和行为,统一称为 成员。
- 实例化 :通过一个类,创建一个对象的过程。
- 属性 也叫:成员属性 / 成员变量。
- 行为 也叫:成员函数 / 成员方法。
示例1:
class Student
{
public:// 公共权限// 类中的属性和行为,统一称为 成员// 属性 成员属性 成员变量string Name; // 姓名int ID; // 学号// 行为 成员函数 成员方法// 显示姓名和学号void showStudent(){cout << "姓名: " << Name << " 学号: " << ID << endl;}void setName(string xname){Name = xname;}
};int main() {Student s1;s1.Name = "XiaoMing";s1.ID = 20200804;s1.showStudent();s1.setName("小明");s1.showStudent();system("pause");return 0;
}
-----------------------------------------------------------------------
姓名: XiaoMing 学号: 20200804
姓名: 小明 学号: 20200804
请按任意键继续. . .
封装的意义二:类在设计时,可以把属性和行为放在不同的权限下,加以控制。
访问权限有三种:
- 1. public 公共资源。成员 类内可以访问,类外可以访问。
- 2. protected 保护资源。成员 类内可以访问,类外不可以访问。继承时,子类可以访问父类中的保护内容。
- 3. private 私有资源。成员 类内可以访问,类外不可以访问。继承时,子类不可以访问父类中的私有内容。
4.1.2 class和struct的区别
在C++中,class和struct的唯一区别就在于默认的访问权限不同。
区别:
struct 默认权限为公共。class默认权限为私有。
class C1
{int A;
};struct C2
{int A;
};int main() {C1 c1;c1.A = 10; // 编译器报错,访问权限是私有C2 c2;c2.A = 10; // 正确,访问权限是公共system("pause");return 0;
}
4.1.3 成员属性设置为私有
优点1:将所有成员属性设置为私有,可以自己控制读写权限。
优点2:对于写权限,我们可以检测数据的有效性。
全部设置为私有,然后定义函数getxxx、setxxx去读写,而且可以对输入值进行预处理,不符合需求的数据可以不要。
class Person
{
public:string getName(){return name;}void setName(string xname){name = xname;}int getAge(){return age;}void setAge(int xage){if (xage > 150 || xage < 0){cout << "年龄输入有误,请控制输入在 0~150 之内" << endl;return;}else{age = xage;}}private:string name;int age;int height;
};int main() {Person p;p.setName("XiaoMing");p.setAge(22);cout << "姓名: " << p.getName() << " 年龄: " << p.getAge() << endl;p.setAge(180);cout << "姓名: " << p.getName() << " 年龄: " << p.getAge() << endl;system("pause");return 0;
}
----------------------------------------------------------------------------
姓名: XiaoMing 年龄: 22
年龄输入有误,请控制输入在 0~150 之内
姓名: XiaoMing 年龄: 22
请按任意键继续. . .
4.1.4 类拆分成.h.c编写方法
类拆分成.h.c编写方法:(P105)
- .h 文件中,开头添加 #pragma once 防止头文件重复包含。再将类复制过来,删除成员函数的实现,加 ; 补全。成员变量不用改变。
- .c 文件中,将类复制过来,删除 类声明、括号、public:、private:、成员变量,只留下成员函数。将每个成员函数加上类名的作用域。
- main所在的文件,包含 .h头文件。
示例:(将上一节的代码拆分)
person.h
#pragma once
#include <iostream>
using namespace std;class Person
{
public:string getName();void setName(string xname);int getAge();void setAge(int xage);private:string name;int age;int height;
};
person.cpp
#include "person.h"string Person::getName()
{return name;
}void Person::setName(string xname)
{name = xname;
}int Person::getAge()
{return age;
}void Person::setAge(int xage)
{if (xage > 150 || xage < 0){cout << "年龄输入有误,请控制输入在 0~150 之内" << endl;return;}else{age = xage;}
}
demo.cpp
#include <iostream>
using namespace std;
#include <string>
#include "person.h"int main() {Person p;p.setName("XiaoMing");p.setAge(22);cout << "姓名: " << p.getName() << " 年龄: " << p.getAge() << endl;p.setAge(180);cout << "姓名: " << p.getName() << " 年龄: " << p.getAge() << endl;system("pause");return 0;
}
相关教程
- 开发环境搭建:Visual Studio 2019 C++开发环境搭建
- 推荐视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&seid=4205594350351753444
- 已投币三连,非常细致的视频教程,感谢up主。
c/c++教程 - 2.4.1 类和对象,封装,class和struct的区别,成员属性设为私有,类拆分成.h.c文件编写方法相关推荐
- 【黑马程序员 C++教程从0到1入门编程】【笔记4】C++核心编程(类和对象——封装、权限、对象的初始化和清理、构造函数、析构函数、深拷贝、浅拷贝、初始化列表、友元friend、运算符重载)
黑马程序员C++教程 文章目录 4 类和对象(类属性[成员属性],类函数[成员函数]) 4.1 封装 4.1.1 封装的意义(三种权限:public公共.protected保护.private私有)( ...
- [黑马程序员C++笔记]P99-P104类和对象-封装
视频地址:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili 目录 P99类和对象-封装-属性和行为作为整体 P100类和对象-封装-案例-设计学生类 P101 ...
- python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态
六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...
- C++类与对象——封装
目录 前言 一.属性的行为作为整体 1.封装的意义: 1.1封装的意义一--基本语法 1.2案例(设计一个学生类) 1.3封装的意义二--访问权限 二.class和struct的区别 三.成员属性私有 ...
- 【学习笔记】C++ 核心编程(二)类和对象——封装
内容来自小破站<黑马程序员C++>复习自用 [学习笔记]C++ 核心编程(二)类和对象--封装 4 类和对象 4.1 封装 4.1.1 封装的意义(一) 4.1.1 封装的意义(二) 4. ...
- 1.定义一个丈夫Husband类,有姓名、年龄、性别,妻子属性。 2.定义一个妻子Wife类,有姓名、年龄、性别,丈夫属性。 3.丈夫类中有一个getInfo方法,其中,能显示自己的姓名,年龄,和他的
//1.定义一个丈夫Husband类,有姓名.年龄.性别,妻子属性. //2.定义一个妻子Wife类,有姓名.年龄.性别,丈夫属性. //3.丈夫类中有一个getInfo方法,其中,能显示自己的姓名, ...
- C++阶段03笔记02【类和对象(封装、对象的初始化和清理、对象模型和this指针、友元、运算符重载、继承、多态)】
C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 1.内存分区模型 2.引用 3.函数提高 4.类和对象 4.1.封装 4.1.1.封装的意义 --实例1:设计圆类 --实例2: ...
- 装饰器/使用类和对象封装一个工具类
# coding:utf-8 # 装饰器是以@开头,@结构称为语法糖,装饰器的作用主要是给现有的函数增加一些额外的功能. # @classmethod # @staticmethod # @prope ...
- python类与对象 封装继承与多态 0308
类与对象 初始化方法 init方法 带参实例化类 del方法 str方法 私有 继承 方法的重写 super 父类名称调父类方法 调用父类私有 间接调用 多继承 新式类经曲类 多态 类属性 类方法 静 ...
最新文章
- 华山论剑之浅谈iOS的生产线 工厂模式
- 主从复制跳过错误(未采用GTID)
- Elasticsearch搜索引擎之缓存:Request Cache、Query Cache、Fielddata Cache
- Thinkphp ajax分页
- iOS之深入解析WKWebView加载的生命周期与代理方法
- AppVerifier的功能和原理
- mysql Partition(分区)初探
- 【牛客 - 373A】翻硬币问题(博弈,结论,分析)
- 纸牌三角形(蓝桥杯)
- c中获取python控制台输出_在真实的tim中用C捕获控制台python打印
- 【ElasticSearch】ElasticSearch在数十亿级别数据下,如何提高查询效率? 性能优化
- Ancient Messages UVA - 1103
- ucdavis计算机科学专业,UCDavis的CS「加州大学戴维斯分校计算机科学专业」
- ThickBox在ASP.NET中的应用
- c语言编程学习宝典,C语言学习宝典
- python怎么输入一个数-Python中实现输入一个整数的案例
- 用CD怎么装linux系统,CDLinux怎么安装使用,CDLinux教程解析
- SpringBoot集成elasticsearch 总结
- scrapy下载斗鱼主播图片
- 使用 MAUI 在 Windows 和 Linux 上绘制 PPT 的图表