C++对象模型和this指针

这篇具有很好参考价值的文章主要介绍了C++对象模型和this指针。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.C++对象模型

--->成员变量和成员函数时分开储存的(在C++中,类内的成员变量和成员函数分开储存,

只有非静态成员变量才属于类的对象上

C++对象模型和this指针,c++,开发语言

--->空对象:

#include <iostream>
using namespace std;
class Person
{

};
void test01()
{
	Person p;
	cout << sizeof(p) << endl;//1
}
int main()
{
	test01();
	return 0;
}

C++对象模型和this指针,c++,开发语言

#include <iostream>
using namespace std;
class Person
{
public:
	int m_A;//非静态成员变量,属于类的对象上
	static int m_B;//静态成员变量,不属于类的对象上
	void func() {};//非静态成员函数,不属于类的对象上
};
int Person::m_B = 0;//(类内声明,类外初始化)
void test01()
{
	Person p;
	cout << sizeof(p) << endl;//4
}
int main()
{
	test01();
	return 0;
}

用sizeof()计算类所占的空间时,只计算属于类的对象上的!!!!!!!!!!!!!!!!

!!!!!!!只有非静态成员变量属于类的对象上!!!!!!!

二.this指针

--->指向被调用的成员函数所属的对象

C++对象模型和this指针,c++,开发语言

//用this指针解决名称冲突
#include <iostream>
using namespace std;
class Person
{
public:
	Person(int age)//有参构造函数
	{
		this->age = age;//this指针指向的是被调用的成员函数所属的对象,谁调用了这个有参构造,this指针就指向谁
	}
	int age;//成员变量与形参撞名
};
void test01()
{
	Person p(18);
	cout << "p的年龄为:" << p.age << endl;
}
int main()
{
	test01();
	return 0;
}
//返回对象本身用*this
#include <iostream>
using namespace std;
class Person
{
public:
	Person(int age)
	{
		this->age = age;
	}
	Person& PersonAddAge(Person& p)
	{
		this->age += p.age;
		return *this;//返回本身才能实现叠加操作(链式编程思想)
	}
	int age;
};
void test01()
{
	Person p1(10);
	Person p2(20);
	p2.PersonAddAge(p1);
	cout << p2.age << endl;//30
}
int main()
{
	test01();
	return 0;
}

C++对象模型和this指针,c++,开发语言

--->链式编程思想:

C++对象模型和this指针,c++,开发语言

必须要指针的指针才能对p2进行修改,否则return的只是p2的副本

C++对象模型和this指针,c++,开发语言

三.空指针访问成员函数

(C++空指针可以调用成员函数,但要注意有没有用到this指针)

//空指针访问成员函数
#include <iostream>
using namespace std;
class Person
{
public:
	void showPerson()
	{
		cout << "This is Person class" << endl;
	}
	void showPersonAge()
	{
		cout << "age=" << m_Age << endl;//等价于this->m_Age
	}
	int m_Age;//非静态成员变量,属于类的对象上,编译器不知道年龄属于哪个对象
};
void test01()
{
	Person* p=NULL;
	p->showPerson();//正常运行
	p->showPersonAge();//报错(原因:传入指针为空)
}
int main()
{
	test01();
	return 0;
}

--->改进:(若为空指针,直接返回,不进行访问)
C++对象模型和this指针,c++,开发语言

C++对象模型和this指针,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-861702.html

到了这里,关于C++对象模型和this指针的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • [开发语言][python][c++]:C++中的this指针和Python中的Self -- 26岁生日

    以朋友的新岁祝福开篇,祝笔者也祝大家☺️: 之前一直对 C++ 中的 this 和 python 中的 self 到底是什么关系,为什么 C++ 要显式的写出来,python 则不需要? 模糊不清,趁着周末整理一下相关结论,希望本篇文章可以解答这些问题,同时对C++和Python中的类加深些理解。 python 当

    2024年01月24日
    浏览(21)
  • C++类与对象&&this指针

    从此篇往后,开始了C++的类和对象的篇章,嗯就说这么多 C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如: 之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现, 会发现struct中也可以定义函

    2024年02月02日
    浏览(20)
  • 【c++】类和对象(二)this指针

    🔥 个人主页 :Quitecoder 🔥 专栏 :c++笔记仓 朋友们大家好,本节内容来到类和对象第二篇,本篇文章会带领大家了解 this指针 首先我们定义一个日期类date: 我们来思考这么一个问题: Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,也就是说,d

    2024年04月11日
    浏览(32)
  • 【C++】:类和对象(上)+ this指针

    【本节目标】 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 5.类的作用域 6.类的实例化 7.类的对象大小的计算 8.类成员函数的this指针 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题 C++是基于面向对象

    2024年02月08日
    浏览(11)
  • 【C++】类与对象【定义、访问限定符、this指针】

      🌈个人主页: 秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 🔥 系列专栏: http://t.csdnimg.cn/eCa5z   目录 面向过程和面向对象初步认识  类的引入 类的定义 成员变量命名规则的建议: 类的访问限定符及封装 访问限定符  封装 类的实例化 类对象模型 类对象的存储方式 计

    2024年02月21日
    浏览(16)
  • 【C++】类和对象详解(类的使用,this指针)

    提示:这里可以添加本文要记录的大概内容: 在计算机编程领域,程序设计的方法论不断演化,从最初的面向过程到如今更为强大而灵活的面向对象。本文将深入探讨C++中关于类和对象的概念,为读者提供对面向对象编程的深刻理解。 提示:以下是本篇文章正文内容,下面

    2024年02月02日
    浏览(13)
  • C++ 类和对象(一)类、访问限定符、this指针

            C++中的类(class)是实现数据抽象和面向对象程序设计的核心。本文作为类和对象的开篇,将介绍有关类的基础知识,之后会持续更新类和对象的深入内容。 目录 前言 1 类的引入 2 类的定义 3 访问限定符和封装 3.1 访问限定符 3.2 封装 4 类的实例化及类对象的储存

    2024年02月10日
    浏览(12)
  • C++:类和对象(上)---初步认识类和this指针

    C语言是一门面向过程的语言关注的是过程,确认一个问题求解的步骤,再一步一步对它进行解决 C++是一门基于面向对象的语言,它更关注的是对象,将一个事情分成不同的对象,再用对象完成问题的解决 在C语言中有结构体,但结构体中只能定义变量,而在C++中还可以定义函

    2024年02月16日
    浏览(12)
  • 【是C++,不是C艹】 类与对象 | 认识面向对象 | 访问限定符 | 封装 | this指针

    💞💞 欢迎来到 Claffic 的博客 💞💞  👉  专栏: 《是C++,不是C艹》👈 前言: 在C++入门之后,就要进入C++的第一个核心:类与对象,这期带大家认识认识面向对象编程,访问限定符,封装以及 this 指针。 注: 你最好是学完了C语言,并学过一些初阶的数据结构。 (没有目

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

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

    2024年01月19日
    浏览(9)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包