C++中struct也有构造函数与析构函数,也可以有访问类型控制以及结构体大小,类大小

本文深入探讨了C++中结构体与类的区别,着重解释了结构体与类在构造函数、析构函数以及访问类型控制上的特点,并通过代码实例展示了它们的使用方式。同时比较了C++与C语言在结构体定义上的差异,特别强调了sizeof运算符在两者中的不同表现。

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

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 )都不会计算函数的大小,只会计算成员变量的大小。

http://blog.youkuaiyun.com/devil_2009/article/details/6871324


struct 是一种用户自定义的数据类型,用于封装多个不同类型的数据成员。在 C++ 中,struct构造函数用于初始化 struct 的实例化对象。 struct构造函数构造函数相似,用于在创建对象时对数据成员进行初始化。通过在 struct 中声明和定义构造函数,可以方便地初始化对象的数据成员,提高代码的可读性和重用性。 struct构造函数可以有以下特点: 1. 构造函数函数 struct 的名称相同,并且没有返回类型(连 void 也没有)。 2. 构造函数可以有多个重载版本,根据参数的不同进行区分。 3. 构造函数可以有默认参数,使部分参数可以省略。 4. 构造函数可以在构造时执行一些初始化操作,例如给数据成员赋初值、打开文件、分配内存等。 使用 struct 构造函数可以在创建对象时,直接传入参数进行初始化,而无需通过额外的成员函数进行赋值操作。这样可以简化代码,并且保证了对象的初始化过程的一致性。 例如,定义一个 struct Person,其中包含了姓名和年龄两个数据成员。可以通过定义构造函数来初始化这两个成员: struct Person { string name; int age; Person(string n, int a) { name = n; age = a; } }; 通过定义了一个带有两个参数的构造函数,可以在创建 Person 对象时,直接传入参数进行初始化: Person p1("张三", 20); Person p2("李四", 25); 这样就可以通过 struct 构造函数来方便地初始化对象的数据成员。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值