编程语言
首页 > 编程语言> > C/C++编程:无继承情况下的对象构造

C/C++编程:无继承情况下的对象构造

作者:互联网

结构体

对于下面程序片段
在这里插入图片描述
L1、L2、L6表现出三种不同的对象产生方式:

L7将一个类对象指定给另一个,L10设定返回值,L9则明确以delete运算符删除堆对象

一个对象的生命,是该对象的一个执行期属性:

下面是Point的第一次声明,可以写成C程序。C++标准说设置一种POD声明形式:

typedef struct{
	float x, y, z:
}Point;

如果我们用C++来编译这段码,会发生什么事?

当编译期遇到如下定义:

/*(1)*/ Point global;

当编译期遇到如下定义:

/*(2)*/ Point local;

当编译期遇到如下定义:

/*(6)*/ Point *heap = new Point;
Point *heap = __new(sizeof(Point));

当编译期遇到如下赋值操作:

/*(7)*/ *heap = local;

当编译期遇到如下操作:

/*(9)*/delete  heap;
__delete(heap);

当编译期遇到如下操作:

(10) return local;

抽象数据类型

以下是Point的第二次声明,在public接口下多了private数据,提供完整的封装性,但没有提供任何虚函数:

class Point{
public:
	Point(float x = 0.0, float y = 0.0, float z = 0.0) : _x(x), _y(y), _z(z){
	}
private:
	float _x, _y, _z;
};

这个经过封装的Point类,其大小并没有改变,还是三个连续的float。是的,不论private、public存取层,或者是成员函数的声明,都不会占用额外的对象空间

对于一个global实体:

Point global; // 实施Point::Point(0.0, 0.0, 0.0);

标签:global,Point,对象,编程,构造,C++,trivial,构造函数
来源: https://blog.csdn.net/zhizhengguan/article/details/116502817