C++结构体继承和结构体内函数的问题

以下程序摘抄自PCL库,无法编译, 请问一下这个结构体EIGEN_ALIGN16 PointXYZ 是什么意思,公有继承 _PointXYZ后,为什么不定义x,y,z 和 data【3】?非常感谢

#define PCL_ADD_NORMAL4D \
union { \
int a;\
float data_n[4]; \
float normal[3]; \
struct { \
float normal_x; \
float normal_y; \
float normal_z; \
}; \
}; \
struct _PointXYZ
{
PCL_ADD_POINT4D; // This adds the members x,y,z which can also be accessed using the point (which is float[4])

EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};

/** \brief A point structure representing Euclidean xyz coordinates. (SSE friendly)
* \ingroup common
*/
struct EIGEN_ALIGN16 PointXYZ : public _PointXYZ
{
inline PointXYZ ()
{
x = y = z = 0.0f;
data[3] = 1.0f;
}

inline PointXYZ (float _x, float _y, float _z)
{
x = _x; y = _y; z = _z;
data[3] = 1.0f;
}

EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};

EIGEN_ALIGN16 这窜标识符应该是定义在某处的宏,目的估计是声明变量或者结构体16位对齐。一般编译器都有相应的编译器扩展来指定对齐方式,他这里用宏而不是直接使用编译器指令是为了能在不同的编译器下使用不同的对齐指令!

指定合适的对齐方式在某些平台和实现上可以提高性能,而且有些平台甚至有严格的对齐要求!
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-10-25
  C++中结构体不仅能够定义方法,还能有继承关系。如下面代码所示:
  namespace std{
struct output_iterator_tag{};
struct input_iterator_tag{};
struct forward_iterator_tag
:public input_iterator_tag{
};
struct bidirectional_iterator_tag
:public forward_iterator_tag{
};
struct random_access_iterator_tag
:public bidirectional_iterator_tag{
};
}

C++结构体继承和结构体内函数的问题
EIGEN_ALIGN16 这窜标识符应该是定义在某处的宏,目的估计是声明变量或者结构体16位对齐。一般编译器都有相应的编译器扩展来指定对齐方式,他这里用宏而不是直接使用编译器指令是为了能在不同的编译器下使用不同的对齐指令!指定合适的对齐方式在某些平台和实现上可以提高性能,而且有些平台甚至有严格的...

C++中的结构体能不能继承
c++ 里面结构体是可以继承的,你可以自己从上面的代码中复制下来,class 改为 struct ,一样能用。struct和class区别可以理解为缺省可见性不同、没有虚表(没有多态)等。

C++中的结构体可不可以直接在结构体内部实现函数?
可以,C++中结构其实就是类,唯一区别是结构中成员的默认访问权限是public类型的,类中是private类型的,所以你想干什么就动手好了,就是别忘了给分

c++类结构体和函数的区别是什么?
C++中的结构体与类的区别只在于结构体的成员默认为公有成员(public可见性),而类的成员默认为私有成员(private可见性),C++中的结构体不同于C语言里的结构体,C里的结构体只能封装一些单一的数据,不能含方法,但在C++的结构体内可以有构造函数,成员函数,还可以指定成员的访问权限(如public和private)。1...

c++中结构体可以定义一个函数么
C++中的结构体和类的异同:一、相同之处:结构体中可以包含函数;也可以定义public、private、protected数据成员;定义了结构体之后,可以用结构体名来创建对象。但C中的结构体不允许有函数;也就是说在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有...

关于结构体指针问题,还有函数指针作为结构体成员的问题
int(*changevar)(int);\/\/你少些了个e 这是一个函数指针,这个changevar指针指向一个这样的函数:这个函数有一个int型参数,返回值也是int.所以if(fb_info.changevar) 的意思就是判断结构体fb_info中的changevar是否为空,等同于if(fb_info.changevar==NULL) .而(*fb_info.changevar)(con)就...

C++类中使用结构体
c++中的结构体只是为了兼容c而保留的,在C++里完全可以使用类来代替结构体。在类中使用结构体实际就是内部类的问题。把结构体看成一个没有成员函数的类。

C++中结构体能否被另一个结构体继承
可以,结构体和类一样,具有派生,继承,封装的性质

C++ 什么情况下用类 什么情况下用结构体?
原因是结构体轻量、性能高,可以不使用new分配堆内存,使用栈内存就可以了。栈内存的使用效率性能要远好于堆内存,从这一点上来说结构是值类型的,而类一般是引用类型的。而类在灵活性上要好于结构体,比如继承封装等。当然类也可以使用栈内存,但是这个相对于结构体要占用多的资源。

结构体中 函数为什么不占空间
全局结构体在数据段,局部结构体在栈上面 而函数在代码段,函数肯定是要占空间的,但是不是占用了栈空间 最多是在函数调用时压栈记录函数地址而已 个人想法,不足请指导

相似回答