学习深度探索C++对象模型(关于对象)

本文深入探讨C++对象模型,通过对比C语言,详细解释C++如何实现数据和函数的封装,提升面向对象编程的理解。以Point3d为例,展示不同访问方式,包括函数、宏及直接访问,并引入抽象数据类型概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

学习深度探索C++对象模型(关于对象)

《深度探索C++对象模型》这本书不那么容易消化,原作者Lippman参与设计全世界第一套C++编译器cfront,本书就是一位伟大的C++编译器设计者向你阐述他如何处理各种explicit和implicit的C++语义。了解C++对象模型,绝对有助于在语言本身以及面向对象观念两方面的层次提升。

本文主要作为学习笔记。代码比较详细,可以踏下心来留作日后理解使用。


关于对象:

  • 对于C语言,数据和函数是分开来声明的,语言本身没有支持数据和函数之间的关联性。此种程序方法称为“程序性”的(procedural),距离说明,如果声明一个struct:Point3D,如下:
#include <stdio.h>

typedef struct point3d
{
	float x;
	float y;
	float z;
}Point3d;

//欲打印一个Point3d 方法一定义函数:
//1
void Point3d_print(const Point3d *pd)
{
	printf("(%g, %g, %g)\n", pd->x, pd->y, pd->z);
}
//定义一个宏
//2
#define Point3d_print(pd) printf("(%g, %g, %g)\n",pd->x,pd->y,pd->z)
//3
Point3d* get_a_point()
{
	Point3d stpd;
	stpd.x = 1.1;
	stpd.y = 2.2;
	stpd.z = 3.3;
	Point3d *pd = &stpd;
	return pd;
}
void my_foo()
{
	Point3d *pd = get_a_point();
	printf("(%g, %g, %g)\n",pd->x, pd->y, pd->z);
}
//5
#define X(p,val) (p.x) = (val)
#define Y(p,val) (p.y) = (val)
#define Z(p,val) (p.z) = (val)

int main()
{
	//1
	/*Point3d stpd;
	stpd.x = 1.1;
	stpd.y = 2.2;
	stpd.z = 3.3;
	Point3d_print(&stpd);*/
	//2
	/*Point3d stpd;
	stpd.x = 1.1;
	stpd.y = 2.2;
	stpd.z = 3.3;
	Point3d *pd = &stpd;
	Point3d_print(pd);*/
	//3
	/*my_foo();*/
	//4
	//直接存取
	/*Point3d pt;
	pt.x = 0.0;*/
	//5
	Point3d stpd;
	X(stpd, 1.1);
	Y(stpd, 2.2);
	Z(stpd, 3.3);
	printf("(%g, %g, %g)\n", stpd.x, stpd.y, stpd.z);
	return 0;
}
  •  在C++中,Point3d有可能采用独立的“抽象数据类型(abstract data type (ADT))”实(看着书中代码信手拈来,要注意太多的小细节):未完待续

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值