C++浅析类与对象基础点

 更新时间:2022年07月08日 09:07:39   作者:幻荼  
类和对象是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型;变量就是可以变化的量,存储在内存中—个可以拥有在某个范围内的可变存储区域

认识类和对象

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。

C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成

举一个例子,如果我们要设计一个点餐平台,依照生活中的例子

那么C:商家上架商品,客户点餐,通知商家制作外卖,通知骑手配送,客户吃完点评.....(过程)

而C++:商家、客户、骑手(对象)

从这个地方就衍生出了”类”这个概念。

我们在学习C语言的时候有过创建结构体

struct Student
{
  char name[20];
  int age;
  char gender[20];
};

而在C++中,我们通常习惯把struct改为class,同时C++和C不同,C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数

class Person
{
public:
	void showlnfo()
	{
		cout << name << sex << age << endl;
	}
public:
	char name;
	char sex;
	int age;
};

而由此我们引出”访问限定符”这个概念。

访问限定符

访问限定符有三个,分别是:

public(公有)

protected(保护)

private(私有)

1. public修饰的成员在类外可以直接被访问

2. protected和private修饰的成员在类外不能直接被访问

3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止(最后一个访问限定符作用域到结尾的;为止)

4. class的默认访问权限为private,struct为public(因为struct要兼容C)

this指针

我们先看一个代码

class Date
{
public:
	void Display()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}
	void SetDate(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year; // 年
	int _month; // 月
	int _day; // 日
};
int main()
{
	Date d1, d2;
	d1.SetDate(2018, 5, 1);
	d2.SetDate(2018, 7, 1);
	d1.Display();
	d2.Display();
	return 0;
}

这里,我们调用了两次setDate,分别是d1和d2,那么我们怎么知道s1调用SetDate函数

时,该函数是如何知道应该设置s1对象,而不是设置s2对象呢?

这里C++就引入了this指针:即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参

数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成

拿上面的例子而言,实际上是这样的

void Display(Date* this)//实际上
	{
		cout <<this-> _year << "-" <<this-> _month << "-" <<this-> _day << endl;
	}
void Display()//你看到的
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}

这样编译器就自动完成区分了。

这里再列举一下this指针的性质:

1. this指针的类型:类型* const

2. 只能在“成员函数”的内部使用

3. this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。

4. this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递

到此这篇关于C++浅析类与对象基础点的文章就介绍到这了,更多相关C++类与对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c++虚函数与虚函数表原理

    c++虚函数与虚函数表原理

    这篇文章主要介绍了c++虚函数与虚函数表原理,用virtual 修饰的成员函数叫虚函数,下面围绕c++虚函数与虚函数得相关资料展开内容,需要的朋友可以参考一下
    2021-12-12
  • 纯C语言:递归二进制转十进制源码分享

    纯C语言:递归二进制转十进制源码分享

    这篇文章主要介绍了纯C语言:递归二进制转十进制源码,有需要的朋友可以参考一下
    2014-01-01
  • C++ assert()函数用法案例详解

    C++ assert()函数用法案例详解

    这篇文章主要介绍了C++ assert()函数用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Qt实现网络聊天室的示例代码

    Qt实现网络聊天室的示例代码

    本文主要介绍了Qt实现网络聊天室,实现一个在线聊天室, 使用tcp对客户端和服务器端进行通讯。具有一定的参考价值,具有一定的参考价值,
    2021-06-06
  • C++求逆序对的方法

    C++求逆序对的方法

    这篇文章主要介绍了C++求逆序对的方法,包含了字符串常见的操作方法,是非常实用的技巧,需要的朋友可以参考下
    2014-09-09
  • c++ 智能指针基础详解

    c++ 智能指针基础详解

    这篇文章主要介绍了c++ 智能指针基础的相关资料,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下
    2021-02-02
  • 如何用C++实现A*寻路算法

    如何用C++实现A*寻路算法

    寻路是游戏比较重要的一个组成部分。因为不仅AI还有很多地方(例如RTS游戏里操控人物点到地图某个点,然后人物自动寻路走过去)都需要用到自动寻路的功能。本文将介绍一个经常被使用且效率理想的寻路方法-A*寻路算法,并且提供额外的优化思路
    2021-06-06
  • 探讨编写int strlen(char *strDest);不允许定义变量的问题

    探讨编写int strlen(char *strDest);不允许定义变量的问题

    本篇文章是对编写int strlen(char *strDest);不允许定义变量的问题进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++继承详细介绍

    C++继承详细介绍

    我们都知道面向对象语言的三大特点是:**封装,继承,多态。**之前在类和对象部分,我们提到了C++中的封装,那么今天呢,我们来学习一下C++中的继承
    2022-10-10
  • C语言实现链栈的步骤

    C语言实现链栈的步骤

    链栈是栈的链式存储结构,链栈可以用单链表的头插法实现,本文主要讲述了如何用c语言去实现链栈,感兴趣的朋友可以了解下
    2021-05-05

最新评论