C++篇----类、封装、类访问权限、类实例化

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


一、面向过程和面向对象

c语言是面向过程的编程语言 c++是面向对象的编程语言

面向过程:关注过程,对于求解问题的不走,调用函数逐步解决问题 就洗衣服来说:洗衣服需要放水,倒洗衣粉,排水,甩干,晾衣服
面向对象:关注的是对象,在洗衣服这一整体来说,参与的对象有人,洗衣粉,洗衣机,衣架(注重的是哪些参与了)关注的是对象 一个外卖系统
面向过程 点餐、上架、派单、送餐(关注过程步骤) 面向对象:
关注整个外卖系统它的对象是哪些(商家、用户、骑手)它们之间的关系,对象和对象之间的交互 将现实世界类和对象映射到虚拟计算机系统

二、类

c++兼容c语言以前的语法,struct以前的用法在c++也可以用 但是在c++中,将原本c语言中的结构体(struct)升级为了类
而在c++中,以class来代替struct作类
类:class为类的关键字,class className
class表示为类,className为类名

#include<iostream>
using namespace std;

struct Stack
{
	int* a;
	int top;
	int capacity;
};

int main()
{
	//c语法
	struct Stack st1;

	//c++将struct升级为类,此时Stack为类名,可以直接用其来定义变量(对象)
	Stack st;
	return 0;
}

类域

类形成了一个新的作用域:类域。不同类有各自不同类域,就像不同函数有不同局部域一样, 所以在不同类中定义重名成员不构成重定义
类中成员当前面的成员访问在它后面的成员是,不需要提前声明,因为类域是一个整体,在类域中访问它的成员可以随时访问
类域是一个整体不分前后访问顺序,类中前面的成员可以访问在其后面的成员

而类它的成员较结构体新增了成员函数(方法),可以在类中直接定义函数

以栈为例
struct

struct Stack
{
	//在一般情况下还需要在前面加栈的前缀,但是现在就在这个类中直接将栈的实现写出
	void Init(int defaultcapacity = 4)//类成员函数(方法)
	{
		a = (int*)malloc(sizeof(int) * defaultcapacity);
		if (nullptr == a)
		{
			perror("malloc fail\n");
			return;
		}

		top = 0;
		capacity = defaultcapacity;
	}

	void Push(int x)
	{
		//...扩容
		a[top++] = x;
	}

	void Destroy()
	{
		free(a);
		a = nullptr;
		top = capacity = 0;
	}

	int* a;
	int top;
	int capacity;
};

int main()
{
	Stack st;
	st.Init();
	return 0;
}

C++篇----类、封装、类访问权限、类实例化

class

#include<iostream>
using namespace std;

class Stack
{
public:
	//在一般情况下还需要在前面加栈的前缀,但是现在就在这个类中直接将栈的实现写出
	void Init(int defaultcapacity = 4)
	{
		a = (int*)malloc(sizeof(int) * defaultcapacity);
		if (nullptr == a)
		{
			perror("malloc fail\n");
			return;
		}

		top = 0;
		capacity = defaultcapacity;
	}

	void Push(int x)
	{
		//...扩容
		a[top++] = x;
	}

	void Destroy()
	{
		free(a);
		a = nullptr;
		top = capacity = 0;
	}

	int* a;
	int top;
	int capacity;
};

int main()
{
	Stack st;
	st.Init(4);//不可访问,当加了权限访问符(public)就可以访问了
	return 0;
}

C++篇----类、封装、类访问权限、类实例化

可以发现,struct关键字定义的类可以通过,而class定义的类无法通过,且class定义的类报了个无法访问的错误

访问权限
那是因为类有访问权限,三大访问权限

public:公开权限,外部用户可以访问到类中成员
protected:将类中成员保护起来不让类外部成员访问
private:只能在类域中访问,类域之外无法访问

以struct关键字作为类,它的默认访问权限是公开的(public)权限
以class关键字作为类,它的默认访问权限是私有的(private)权限

所以一般情况下,要让类之外使用到类中的哪些成员,需要用public权限访问

访问权限作用域为多大?访问权限作用域从访问符出现的位置起到下一个访问权限限定符出现的位置为止,
如果之后一直没有出现下一个访问权限限定符,那么直到类域结束
C++篇----类、封装、类访问权限、类实例化

public到private之间的类成员是公开的,类之外能访问,而public访问的权限到private为止

封装

类将数据与实现这些数据的方法封装起来,用类将对象的属性(数据)与方法(成员函数)结合起来,让对象更加完善
将数据与方法封装起来,那么在外部用户访问它时它可以指定将哪些成员开放让别人访问到,也可以使不想让外部用户访问到的成员隐藏起来,那么类是如何使它的成员可以让别人访问与否?加访问权限

类成员函数声明与定义

那么类,它的成员函数可以将声明和定义分离吗?可以 在类中声明的函数在类域之外定义需要有作用域限定符::代表它是类的成员函数,
C++篇----类、封装、类访问权限、类实例化

且在函数实现时
函数中的变量来自于类的话,它要去类中找,当表明这个定义的函数是类中的成员函数是,在函数中 的变量先在函数中找,然后在类域找最后全局找
在类域外边定义函数,函数前指定类域代表这个函数也就不是普通函数了,而是类中一个成员函数的定义

而且类的成员函数,定义和声明没有分离时,这个函数就是内联函数,当然只是建议编译器这个函数为内联函数
如果代码量特别大,编译器也不会接收这个建议

类成员名一般规则

类成员变量一般以_作为前缀,由于类成员函数在定义时,有可能会定义与成员变量重名,所以类,成员变量一般以_开头

#include<iostream>
using namespace std;
class Year
{
public:
	void is_year(int year)
	{
		//先用局部域在用类域
		_year = year;
		cout << _year << endl;
	}

	int _year;
};

int main()
{
	Year y;
	y.is_year(2002);

	cout << y._year << endl;
	return 0;
}

类实例化

类中成员变量只是有一个声明,并没有定义,所以没有开空间 相当于房子,只是有图纸,还没有建成真是的房子,还不能住人
只有声明并不能给声明的变量赋值,将其对象定义出来才是类的实例化
C++篇----类、封装、类访问权限、类实例化
没有将类对象实例化出来,就访问它的成员变量,根本访问不到,相当于图纸上面画了有房子,但是现实世界中并没有将其建造出来,而仅凭一张图纸,是找不到房子的文章来源地址https://www.toymoban.com/news/detail-424751.html

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

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

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

相关文章

  • 【C++】类和对象 - 封装 - 属性和行为,访问权限,class 和 struct区别,成员属性私有化

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

    2024年02月07日
    浏览(35)
  • 【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )

    在下面的 Python 类 Student 中 , 定义了私有的成员变量 , 该私有成员变量 , 只能在类内部进行访问 , 类的外部无法进行访问 ; 在 类外部 创建的 Student 实例对象 , 是无法访问 __address 私有成员的 ; 使用 实例对象 访问 类的私有成员 , 编译时不会报错 , 但是运行时会报错 最后一行代

    2024年02月13日
    浏览(35)
  • 【c++随笔11】面向对象和封装

    原创作者:郑同学的笔记 原创地址:https://zhengjunxue.blog.csdn.net/article/details/131794661 qq技术交流群:921273910 C++ 是基于面向对象的程序,面向对象有三大特性 —— 封装、继承、多态。 当谈到C++编程时,面向对象编程(OOP:Object-Oriented Programming)和封装是两个重要的概念。通过

    2024年02月05日
    浏览(37)
  • c++面向对象之封装、继承、和多态

    把客观事物封装成类,而且可以把自己的数据和方法设置为只能让可信的类或者对象操作,对不可信的信息进行隐藏(利用public,private,protected,friend)实现 has-a :描述一个类由多个部件类构成,一个类的成员属性是另一个已经定义好的类。 use-a:一个类使用另一个类,通过类之间

    2024年02月02日
    浏览(37)
  • C++ 面向对象核心(继承、权限、多态、抽象类)

    继承(Inheritance)是面向对象编程中的一个重要概念,它允许一个类(称为派生类或子类)从另一个类(称为基类或父类)继承属性和方法。继承是实现类之间的关系,通过继承,子类可以重用父类的代码,并且可以在此基础上添加新的功能或修改已有的功能。 在C++中,继承

    2024年02月08日
    浏览(36)
  • 【C++】类的封装 ③ ( 访问控制权限 )

    在 C++ 语言中 , 类的成员 的 \\\" 访问控制权限 \\\" 是通过 \\\" 访问修饰符 \\\" 指定的 ; 类的 成员属性 和 成员方法 都可以 设置 访问控制权限 , 都可以被 访问修饰符 所修饰 ; C++ 语言 提供了 3 种 访问修饰符 : public : 修饰的 成员变量 和 成员函数 , 是 公开的 , 可以在任何地方访问 , 在

    2024年02月09日
    浏览(24)
  • 【C/C++】C语言和C++的区别 | 面向过程与面向对象

    创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡𖥦)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c++系列专栏:C/C++零基础到精通 🔥 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ c语言内容💖:

    2024年02月07日
    浏览(34)
  • 【TensorRT】c++使用面向对象来封装tensorRT推理代码的指针释放问题

    初始化模型 这里可以看到我用了智能指针来分别定义_engine, _runtime, _context。并且我在头文件中定义了一个类来封装我的推理代码,包括初始化模型的步骤: 类封装 在这里可以看到,我已经将_engine, _runtime, _context都定义在了类的成员变量当中,并且都用的智能指针shared_ptr的方

    2024年01月18日
    浏览(34)
  • C++类成员的访问权限以及类的封装

    C++通过 public、protected、private 三个来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。所谓访问权限,就是你能不能使用该类中的成员。 Java、C# 程序员注意,C++ 中的 public、private、protected 只能修饰类的成员,不

    2024年02月11日
    浏览(28)
  • C++初阶类与对象(一):学习类与对象、访问限定符、封装、this指针

    入门知识已经梳理完毕了,接下来就进入到面型对象的部分学习了 C语言典型的 面向过程 的,关注的是过程,分析出求解问题的步骤,通过函数调用 逐步解决 问题 C++是典型的基于 面向对象 的,关注的是对象,将一件事情 拆分成不同的对象 ,靠对象之间的交互完成。 将大

    2024年01月19日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包