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++实现LeetCode(100.判断相同树)

    C++实现LeetCode(100.判断相同树)

    这篇文章主要介绍了C++实现LeetCode(100.判断相同树),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++实现leetcode(3.最长无重复字符的子串)

    C++实现leetcode(3.最长无重复字符的子串)

    这篇文章主要介绍了C++实现leetcode(3.最长无重复字符的子串),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 为什么要学习C语言 C语言优势分析

    为什么要学习C语言 C语言优势分析

    不止一个学生问到我:“老师,为什么我们的应用程序设计要学C语言而不是别的?C语言不是已经过时了吗?如果现在要写一个Windows程序,用VB或Dephi开发多快呀,用C行吗?退一万步,为什么选择C而不是C++呢?”
    2013-07-07
  • C++ move()函数及priority_queue队列使用记录

    C++ move()函数及priority_queue队列使用记录

    move(obj)函数的功能是把obj当做右值处理,可以应用在对象的移动上,这篇文章主要介绍了C++ move()函数及priority_queue队列使用记录,需要的朋友可以参考下
    2023-01-01
  • C语言由浅入深讲解文件的操作下篇

    C语言由浅入深讲解文件的操作下篇

    C语言具有操作文件的能力,比如打开文件、读取和追加数据、插入和删除数据、关闭文件、删除文件等。与其他编程语言相比,C语言文件操作的接口相当简单和易学
    2022-04-04
  • C++中vector容器使用详细说明

    C++中vector容器使用详细说明

    在c++中,vector是一个十分有用的容器,下面通过本文给大家介绍C++中vector容器使用详细说明,需要的朋友可以参考下
    2016-10-10
  • C++私有继承(一)

    C++私有继承(一)

    这篇文章主要介绍了C++私有继承,在私有继承当中,基类的公有成员和保护成员都会成为派生类的私有成员。这意味着基类的方法都会被private关键字描述,我们可以在派生类中使用它,但类对象无法直接调用,下面来看看详细内容吧
    2022-01-01
  • C++Primer笔记之顺序容器的使用详解

    C++Primer笔记之顺序容器的使用详解

    本篇文章对C++Primer 顺序容器的使用进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • C++Stack栈类模版实例详解

    C++Stack栈类模版实例详解

    这篇文章主要为大家详细介绍了C++Stack栈类模版实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C语言二叉排序(搜索)树实例

    C语言二叉排序(搜索)树实例

    这篇文章主要为大家详细介绍了C语言二叉排序树实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10

最新评论