C++中struct也有构造函数与析构函数,也可以有访问类型控制,可以用private关键字。如下所示:
- #include <iostream>
-
- struct point
- {
- public:
- point():x_(0.0),y_(0.0)
- {
- std::cout<<"default constructor point\n";
- }
- point(double x,double y):x_(x),y_(y)
- {
- std::cout<<"constructor point("<<x<<", "<<y<<")\n";
- }
- ~point()
- {
- std::cout<<"default destructor point\n";
- }
-
- double get_x()
- {
- return x_;
- }
-
- double get_y()
- {
- return y_;
- }
-
- private:
- double x_;
- double y_;
- };
-
- class point_class
- {
- public:
- point_class():x_(0.0),y_(0.0)
- {
- std::cout<<"default constructor point_class\n";
- }
- point_class(double x,double y):x_(x),y_(y)
- {
- std::cout<<"constructor point_class("<<x<<", "<<y<<")\n";
- }
- ~point_class()
- {
- std::cout<<"default destructor point_class\n";
- }
-
- double get_x()
- {
- return x_;
- }
-
- double get_y()
- {
- return y_;
- }
-
- private:
- double x_;
- double y_;
- };
-
-
- int main()
- {
- point pt;
- std::cout << pt.get_x() << "\n";
- std::cout << pt.get_y() << "\n";
- std::cout << "sizeof( double ): " << sizeof( double ) <<
- ", sizefof( point ): " << sizeof( point ) << "\n";
-
- point_class pt_c;
- std::cout << "sizeof( double ): " << sizeof( double ) <<
- ", sizefof( point_class ): " << sizeof( point_class ) << "\n";
- }
输出结果为:
default constructor point
0
0
sizeof( double ): 8, sizefof( point ): 16
default constructor point_class
sizeof( double ): 8, sizefof( point_class ): 16
default destructor point_class
default destructor point
看来,struct与class是小异大同。struct默认访问权限是public,class是private;class有继承,多态机制,而struct没有。
与C语言的区别:
1、C++中struct可以定义函数,但是C语言中struct只可以定义函数指针。
2、C语言中sizeof( struct ),会把定义的函数指针计算大小;C++中sizeof( struct ) 和 sizeof( class )都不会计算函数的大小,只会计算成员变量的大小。