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++保存HBITMAP为位图文件的实现方法

    C++保存HBITMAP为位图文件的实现方法

    这篇文章主要介绍了C++保存HBITMAP为位图文件的实现方法,帮助大家更好的理解和使用c++,感兴趣的朋友可以了解下
    2021-01-01
  • C语言数组超详细讲解上

    C语言数组超详细讲解上

    数组是一组有序的数据的集合,数组中元素类型相同,由数组名和下标唯一地确定,数组中数据不仅数据类型相同,而且在计算机内存里连续存放,地址编号最低的存储单元存放数组的起始元素,地址编号最高的存储单元存放数组的最后一个元素
    2022-04-04
  • C++学习小结之语句

    C++学习小结之语句

    本文给大家汇总介绍了下C++中比较基础的知识--语句,常用的语句都有详细介绍和附上了相关示例,十分实用,有需要的小伙伴可以参考下
    2015-07-07
  • C++(STL库)之顺序容器vector的使用

    C++(STL库)之顺序容器vector的使用

    这篇文章主要介绍了C++(STL库)之顺序容器vector的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 解析四方定理的应用

    解析四方定理的应用

    所有自然数至多只要用四个数的平方和就可以表示
    2013-05-05
  • C语言控制台应用程序GDI绘制正弦曲线

    C语言控制台应用程序GDI绘制正弦曲线

    这篇文章主要为大家详细介绍了C语言控制台应用程序GDI绘制正弦曲线,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • C语言中的sscanf()函数使用

    C语言中的sscanf()函数使用

    本文主要介绍了C语言中的sscanf()函数使用,sscanf通常被用来解析并转换字符串,可以实现很强大的字符串解析功能,下面就一起来了解一下
    2023-05-05
  • 简单的socket编程入门示例

    简单的socket编程入门示例

    这篇文章主要介绍了简单的socket编程入门示例,简单实现client输入内容发送到server端输出,需要的朋友可以参考下
    2014-03-03
  • VC读配置文件实例

    VC读配置文件实例

    这篇文章主要介绍了VC读配置文件的方法,实例讲述了VC针对文件操作的技巧,需要的朋友可以参考下
    2014-10-10
  • C++结合QT实现带有优先级的计算器功能

    C++结合QT实现带有优先级的计算器功能

    这篇文章主要介绍了C++结合QT实现带有优先级的计算器,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01

最新评论