目录

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文件编写方法相关推荐

  1. 【黑马程序员 C++教程从0到1入门编程】【笔记4】C++核心编程(类和对象——封装、权限、对象的初始化和清理、构造函数、析构函数、深拷贝、浅拷贝、初始化列表、友元friend、运算符重载)

    黑马程序员C++教程 文章目录 4 类和对象(类属性[成员属性],类函数[成员函数]) 4.1 封装 4.1.1 封装的意义(三种权限:public公共.protected保护.private私有)( ...

  2. [黑马程序员C++笔记]P99-P104类和对象-封装

    视频地址:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili 目录 P99类和对象-封装-属性和行为作为整体 P100类和对象-封装-案例-设计学生类 P101 ...

  3. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  4. C++类与对象——封装

    目录 前言 一.属性的行为作为整体 1.封装的意义: 1.1封装的意义一--基本语法 1.2案例(设计一个学生类) 1.3封装的意义二--访问权限 二.class和struct的区别 三.成员属性私有 ...

  5. 【学习笔记】C++ 核心编程(二)类和对象——封装

    内容来自小破站<黑马程序员C++>复习自用 [学习笔记]C++ 核心编程(二)类和对象--封装 4 类和对象 4.1 封装 4.1.1 封装的意义(一) 4.1.1 封装的意义(二) 4. ...

  6. 1.定义一个丈夫Husband类,有姓名、年龄、性别,妻子属性。 2.定义一个妻子Wife类,有姓名、年龄、性别,丈夫属性。 3.丈夫类中有一个getInfo方法,其中,能显示自己的姓名,年龄,和他的

    //1.定义一个丈夫Husband类,有姓名.年龄.性别,妻子属性. //2.定义一个妻子Wife类,有姓名.年龄.性别,丈夫属性. //3.丈夫类中有一个getInfo方法,其中,能显示自己的姓名, ...

  7. C++阶段03笔记02【类和对象(封装、对象的初始化和清理、对象模型和this指针、友元、运算符重载、继承、多态)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 1.内存分区模型 2.引用 3.函数提高 4.类和对象 4.1.封装 4.1.1.封装的意义 --实例1:设计圆类 --实例2: ...

  8. 装饰器/使用类和对象封装一个工具类

    # coding:utf-8 # 装饰器是以@开头,@结构称为语法糖,装饰器的作用主要是给现有的函数增加一些额外的功能. # @classmethod # @staticmethod # @prope ...

  9. python类与对象 封装继承与多态 0308

    类与对象 初始化方法 init方法 带参实例化类 del方法 str方法 私有 继承 方法的重写 super 父类名称调父类方法 调用父类私有 间接调用 多继承 新式类经曲类 多态 类属性 类方法 静 ...

最新文章

  1. 华山论剑之浅谈iOS的生产线 工厂模式
  2. 主从复制跳过错误(未采用GTID)
  3. Elasticsearch搜索引擎之缓存:Request Cache、Query Cache、Fielddata Cache
  4. Thinkphp ajax分页
  5. iOS之深入解析WKWebView加载的生命周期与代理方法
  6. AppVerifier的功能和原理
  7. mysql Partition(分区)初探
  8. 【牛客 - 373A】翻硬币问题(博弈,结论,分析)
  9. 纸牌三角形(蓝桥杯)
  10. c中获取python控制台输出_在真实的tim中用C捕获控制台python打印
  11. 【ElasticSearch】ElasticSearch在数十亿级别数据下,如何提高查询效率? 性能优化
  12. Ancient Messages UVA - 1103
  13. ucdavis计算机科学专业,UCDavis的CS「加州大学戴维斯分校计算机科学专业」
  14. ThickBox在ASP.NET中的应用
  15. c语言编程学习宝典,C语言学习宝典
  16. python怎么输入一个数-Python中实现输入一个整数的案例
  17. 用CD怎么装linux系统,CDLinux怎么安装使用,CDLinux教程解析
  18. SpringBoot集成elasticsearch 总结
  19. scrapy下载斗鱼主播图片
  20. 使用 MAUI 在 Windows 和 Linux 上绘制 PPT 的图表

热门文章

  1. vuecli3修改项目启动端口
  2. Tomcat的8080、8005、8009端口
  3. angular学习的一些Mark
  4. BeanFactory容器的设计原理
  5. 单链表的插入删除以及逆转
  6. 为什么要用maven - 1
  7. 数据结构复习之【线性表】
  8. 【嵌入式】Linux开发工具gdb及远程调试
  9. 小程序入门学习06--data、url传参、调用豆瓣api
  10. 读书笔记_打开量化投资的黑箱04