首页 > 编程语言 >C++的封装(适合新人,通俗易懂)

C++的封装(适合新人,通俗易懂)

时间:2024-06-21 15:29:09浏览次数:13  
标签:封装 void 通俗易懂 Teacher 访问 private C++ 权限 public

作者:求一个demo

版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

内容通俗易懂,没有废话,文章最后是面试常问内容

1、访问权限

介绍封装,那么需要先介绍一下访问权限:public公共权限、protected保护权限和private私有权限。

(1)public公共权限

简单来说:如果访问权限是public,那么public修饰的成员,在类内以及类外都可以访问。

例如:

#include <iostream>
using namespace std;

class Teacher
{
public:
	int teacherNum;
	void teachClass();
};

void Teacher::teachClass()
{
	cout << "老师在讲课" << endl;
}

int main()
{
	Teacher t;
	t.teachClass();//输出老师在讲课
}
(2)protected保护权限

简单来说:如果访问权限是protected,那么protected修饰的成员,类内可以访问,子类也可以访问父类的成员(子类继承自父类,“继承”相关内容可以查看“C++分栏中的继承模块”)。

例如:

#include <iostream>
using namespace std;

class Teacher
{
public:
	int teacherNum =1;
};

class Student:public Teacher//子类可以访问父类protected修饰的成员变量
{
public://如果不写public,类中成员默认私有private
	void work()
	{
		cout << "教师编号是:" << teacherNum << endl;
	}
};
int main()
{
	Student s;
	s.work();//输出“教师编号是:1”
}
(3)private私有权限

简单来说:如果访问权限是private,那么private修饰的成员,类内可以访问,类外不能访问。

例如:

#include <iostream>
using namespace std;

class Teacher
{
private:
	int teacherNum =1;
public:
	void work();
};

void Teacher::work()
{
	teacherNum = 2;//私有的在类内可以访问
	cout << "教师编号是:" << teacherNum << endl;
}

int main()
{
	Teacher t;
	t.work();//输出“教师编号是:2”
}
(4)访问权限总结
访问权限说明
public公共权限public修饰的成员,类内和类外都可以访问
protected保护权限protected修饰的成员,类内可以访问,子类可以访问父类
private私有权限private修饰的成员,类内可以访问,类外不可以访问

2、访问权限举例

#include <iostream>
using namespace std;

class Teacher
{
private://私有的只有在类内可以访问(类中默认访问权限是私有的)
	int teacherNum;
protected://受保护的在类内和子类中都可以访问
	double teacherPrice;
public://公共的在类内和类外均可访问
	void work();
	string teacherName;
};

void Teacher::work()
{
	teacherNum = 2;//私有的在类内可以访问
	teacherPrice = 9999.9;//受保护的在类内可以访问
	cout << "教师编号是:" << teacherNum << endl;
	cout << "教师薪水是:" << teacherPrice << endl;
}

int main()
{
	Teacher t;
	t.work();//输出“教师编号是:2”“教师薪水是:9999.9”
}

3、校招面试常考问题

问题一:如何在类外访问私有成员?(常用方法如下)
方法1:通过公有方法进行访问
#include <iostream>
using namespace std;

class Teacher
{
private:
	int x;
public:
	void teachTemp(int temp)
	{
		this->x = temp;//公有函数获取私有成员变量
	}
	void teachPrint()
	{
		cout << "私有成员x值为:" << x;
	}
};


int main()
{
	Teacher t;
	t.teachTemp(1);
	t.teachPrint();//输出“私有成员x值为:1”
}
方法2:通过友元进行访问
#include <iostream>
using namespace std;

class Teacher
{
private:
	int price = 1;
	friend void teachClass();//函数teachClass是类Teacher的友元函数
	friend class Dog;//类Dog是类teachClass的友元类
public:
	void print()
	{
		cout << "类的公有成员!"<<endl;
	}
};

void teachClass()
{
	Teacher t1;
	t1.price = 2;//友元函数中可以访问类的私有成员
	cout << "t1.price:" <<t1.price<< endl;//输出“t1.price:2”
	t1.print();//输出“类的公有成员!”
}

class Dog
{
public:
	void fun()
	{
		Teacher t2;
		t2.price = 3;//在友元类中可以访问另一个类的私有成员
		cout << "t2.price:" << t2.price << endl;//输出“t2.price:3”
	}
};
int main()
{
	teachClass();
	Dog d;
	d.fun();
}
方法3:使用指针强制转换进行访问
#include <iostream>
using namespace std;

class Teacher
{
private:
	int price = 1;
public:
	void fun() {}
};

int main()
{
	Teacher t;
	int* ptr = reinterpret_cast<int*>(&t);//reinterpret_cast强制转换指针
	*ptr = 2;
	cout << "修改私有成员:" << *ptr << endl;//输出“修改私有成员:2”
}

最后,如有不足和错误的地方,期待私信指正!

标签:封装,void,通俗易懂,Teacher,访问,private,C++,权限,public
From: https://blog.csdn.net/qq_60018273/article/details/139853368

相关文章

  • A tour of C++ 读书笔记
    第一章:C++只是个编译型语言,需要源文件编译成目标文件,再通过链接各种库到可执行文件1.6常量  const  constexpr这个代表是要在编译的时候估值,性能会有所增加吧2.4联合体(union)  联合体所有的成员都是分配在同一地址上面,所以联合体所占的空间是跟其自身内部成员所......
  • C++入门(万字总结,建议收藏!!!)
    一、前言1.1什么是C++C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代,计算机界提出了OOP(objectorientedprogramming:面向对象)思想,支持面向对象的程序设计语言应运......
  • 计算机毕业设计项目推荐,33709基于协同过滤的旅游推荐系统的设计与实现(开题答辩+程序定
    摘 要本论文主要论述了如何使用python语言、Django框架开发一个旅游推荐系统,本系统将严格按照软件开发流程,进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述该系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析......
  • React+TS前台项目实战(十四)-- 响应式头部导航+切换语言相关组件封装
    文章目录前言Header头部相关组件1.功能分析2.相关组件代码+详细注释3.使用方式4.Gif图效果展示总结前言在这篇博客中,我们将封装一个头部组件,根据不同设备类型来显示不同的导航菜单,会继续使用Reacthooks和styled-components库来构建这个组件,此外,也会实现切换......
  • C++ 面向对象高级开发 2、头文件与类的声明
       ObjectBased(基于对象)vs ObjectOriented(面向对象)ObjectBased:面对的是单一class的设计ObjectOriented:面对的是多重classes的设计,classes和classes之间的关系。         模板就是一种抽象......
  • C++ 面向对象高级开发 3、构造函数
    1、内联函数inline 内联函数速度比较快 最终是不是inline实际上是由编译器决定的。 一般比较简单,编译器就能确定inline函数 2、AccessLevel访问级别  3、构造函数Construct默认实参。Defaultargument.充分利用构造函数的特殊语法,对数据进行初始化,这是一种比......
  • C++数据格式化5 - uint转换成十六进制字符串&二进制的data打印成十六进制字符串
    1.关键词2.strfmt.h3.strfmt.cpp4.测试代码5.运行结果6.源码地址1.关键词关键字:C++数据格式化字符串处理std::stringinthex跨平台应用场景:int型的数据打印成十六进制字符串二进制的data打印成十六进制字符串。2.strfmt.h#pragmaonce#include<stri......
  • 【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
    ......
  • 【图书推荐】《Linux C与C++一线开发实践(第2版)》
    本书重点主要讲解开发环境搭建、C/C++语言基础、文件编程、多进程、Web编程、多线程、库、TCP/IP协议、套接字、并发聊天服务器项目实战。适合选择Linux系统开发方向的开发人员,打下Linux开发的牢固基础。内容简介Linux C/C++编程在Linux应用程序开发中占有重要的地位,掌握......
  • 【C++】【MFC】CView和CDocument关联以及COMMAND消息走向
    MFC编程中,CView类负责显示,CDocument负责数据管理,所以其之间的联系十分重要,包括COMMAND消息的流向CView中的m_pDocument成员将存储和其关联的唯一的CDocument地址,而CDocument中的m_viewList链表将存储和其关联的所有CView地址,即一个CDocument可以有多个CView,但一个CView只能有一个......