当前位置: 首页 > article >正文

C++ 类和对象的初步介绍

文章目录

  • 1.面向过程和面向对象的初步认识
  • 2.类的引入
  • 3.类的定义
  • 4. 类的访问限定符及封装
    • 4.1 访问限定符
    • 4.2 封装
  • 5.类的作用域
  • 6.类的实例化

1.面向过程和面向对象的初步认识

C语言是面向过程的,关注的过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
C++是基于面向对象的,关注的对象,将一件事情拆分成不同的对象,靠对象间的交互完成。

面向对象编程是一种常用的编程思维,它强调万物皆为对象,因此在编程时我们可以把现实世界中的事物抽象成程序中的对象,从而实现软件的设计与开发。与传统的函数编程不同,面向对象编程注重将数据与行为封装在一起,也就是对象包含数据状态,还包含可调用的行为方法。

面向对象编程的特点在于,它具有封装,继承和多态三大特性,封装意味着对象的状态和行为进行封装,使其对外只需要暴露出必要的接口,从而提高了安全性和可维护性;继承是指某个对象可以继承另一个对象的特性,从而快速构建相似属性的对象;多态是指同一种行为在不同的对象上具有不同的表现形式,即在不同的情境下,同一方法可以被不同的对象进行调用。

总之面向对象是一种强大的编程方法,它具有高度的封装性、灵活的继承性和强大的多态性,通过使用对象作为程序的基本处理单元,实现了数据和行为高度有机结合,可以使程序更加高效,结构清晰,并方便管理和扩展。

2.类的引入

C语言结构体中只能定义变量,在C++中,结构体不加可以定义变量,也可以定义函数。比如:

typedef int DataType;

struct  stack
{
	int top;
	int capacity;
	DataType* array;
	void Init() {
		top = 0;
		array = (DataType*)malloc(sizeof(DataType) * 4);
		if (array == nullptr) {
			perror("malloc");
			return;
		}
		capacity = 4;
	}
	void Push(DataType x) {
		if (top == capacity) {
			//扩容
			DataType* tmp = (DataType*)realloc(array, sizeof(DataType) * (capacity * 2));
			if (tmp == nullptr) {
				perror("realloc");
				return;
			}
			array = tmp;
			capacity *= 2;
		}
		array[top] = x;
		top += 1;
	}
	DataType Top() {
		if (top == 0) {
			cout << "stack is empty";
		}
		return array[top - 1];
	}
};

int main()
{
	struct stack ss;
	ss.Init();
	ss.Push(1);
	ss.Push(1);
	ss.Push(1);
	return 0;
}

用C语言实现的栈,结构体中只能定义变量,而现在用C++实现,会发现struct中也可以定义函数。
同时我们也发现,我们再也不用像C语言那样在传个结构体类型到函数中了,直接就可以使用结构体中的变量。
不过在C++中,我们更倾向于用class来定义类。

3.类的定义

class ClassName{
	//类的组成成分:成员变量和成员函数
};

class为定义类的关键字,ClassName为类的名字,{}中为类的主体。注意分号就是了
类体中的内容称为类的成员:类中的变量称类的属性或成员变量;类中的函数称为类的方法或者成员函数。
类的两种定义方式

  1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。
class TestClass{
public:
	void Print(){
		cout<<_a<<_b<<_c<<endl;
	}	
private:
	char* _a;
	int _b;
	int _c;
};
  1. 类声明放在.h文件中,成员函数定义在.cpp文件中,注意:成员函数名前面需要加类名::
//test.h
class TestClass(){
public:
	void Print();
private:
	char* _a;
	int _b;
	int _c;
};

//test.cpp
void TestClass::Print(){
	cout<<_a<<_b<<_c<<endl;
}

在一般情况下,更期望采用第二种方式。

类中成员变量命名建议:建议在命名前或者后加上下划线。

name  ->  _name

age  ->   _age

这样的话,可以很好的类中的成员变量和其他变量。

4. 类的访问限定符及封装

4.1 访问限定符

C++实现封装的方式:用类将对象的属性于方法结合在一块,让对象更加完善,通过访问权限限制性的将其接口提供给外部的用户使用。
访问限定符

  1. public修饰的成员在类外可以被直接访问。
  2. protected和private修饰的成员在类外不能直接被访问。
  3. 访问权限作用域从该修饰限定字符出现的位置开始直到下一个访问限定符出现为止。
  4. 如果后面没有访问限定符,作用域就到}截止。
  5. class的默认访问权限为private,struct的默认访问权限为public。
    提问:C++中的struct和class的区别
    回答:C++需要兼容C语言,所以C++中struct可以当成结构体使用。另外C++中struct还可以用来定义类。和class定义类是一样的,区别是struct定义的类默认访问权限是public,class定义类默认访问权限是private。
    注意:访问限定符只在编译时有效,当数据映射到内存1后,没有任何访问限定符的区别

4.2 封装

将数据和操作方法进行有机结合,隐藏对象的属性和实现细节,仅公开对外接口和对象进行交互。
封装的本质是一种管理,让用户更方便使用类。
就像诸多的电子产品,即使内部结构复杂,但对于使用者来说,不需要区关心它们的内部核心部件,只需要操作其暴露在外部的按钮就可以了,让用户与其完成交互。
在C++语言中实现封装,可以通过将数据以及操作数据的方法进行有机的结合,通过访问权限来隐藏对象内部的细节,控制那些方法可以在类外部直接被使用。

5.类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类外定义成员时,需要使用::作用域操作符来指明成员属于哪个类域。

class Person
{
public:
	void PrintPersonInfo();
private:
	char name_[20];
	char age_;
};

//指定类域
void Person::PrintPersonIn()
{
	//...
}

6.类的实例化

用类类型创建对象的过程,称为类的实例化

  1. 类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它;比如:入学时填写的学生信息表,表格就可以看成一个类,来描述学生的信息。
  2. 一个类可以实例化出多个对象,实例化出的对象,占用实际的物理空间,存储类成员变量。
int main()
{
	Person yui;//实例化对象
	yui.age_ = 18;//初始化
	return 0;
}

http://www.kler.cn/a/331212.html

相关文章:

  • 目标检测——基于yolov8和pyqt的螺栓松动检测系统
  • Verdi -- 打开Consol,创建和执行tcl命令举例
  • 网络安全攻防演练中的常见计策
  • ReentrantLock底层原理、源码解析
  • 远程控制macOS一直卡在100%,能连接上了却只显示了壁纸?
  • HTML基础学习(2)
  • 网页前端开发之Javascript入门篇(3/9):条件控制
  • Vue.js 组件开发知识详解
  • 国外电商系统开发-运维系统开发
  • python如何查询函数
  • pod管理及优化
  • 解决 MySQL 服务无法启动:failed to restart mysql.service: unit not found
  • 2024-09-04 深入JavaScript高级语法十五——浏览器原理-V8引擎-js执行原理
  • Springboot项目jar包中resource目录下静态资源excel、pdf等二进制文件损坏
  • 跨平台音乐播放器Feishin
  • 位运算(6)_只出现一次的数字 II
  • Build a Large Language Model (From Scratch)学习汇总
  • uni-app运行到 Android 真机和Android studio模拟器
  • three.js 通过着色器实现热力图效果
  • 【项目开发】跨专业合作平台实战(附源码)
  • esp32开发环境搭建和烧录测试
  • 10.2学习
  • Sqoop面试整理
  • LeetCode[中等] 763. 划分字母区间
  • Leecode热题100-75.颜色分类
  • 【AndroidStudio】关于AndroidStudio的常见控件TextView和Button