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

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.csdn.net/devil_2009/article/details/6871324


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
如果自定义结构体包含 char 数组,我们可以通过在构造函数分配内存空间,然后在析构函数释放内存空间的方式来管理这些数组。下面是一个示例代码,展示了如何在构造函数析构函数分配和释放 char 数组的内存空间: ```c++ // 定义一个自定义结构体 struct Person { std::string name; int age; char* address; // 构造函数 Person(std::string n, int a, const char* ad) : name(n), age(a) { // 计算地址字符串的长度 int len = strlen(ad); // 分配内存空间 address = new char[len + 1]; // 复制字符串到内存空间 strcpy(address, ad); } // 拷贝构造函数 Person(const Person& p) : name(p.name), age(p.age) { // 计算地址字符串的长度 int len = strlen(p.address); // 分配内存空间 address = new char[len + 1]; // 复制字符串到内存空间 strcpy(address, p.address); } // 析构函数 ~Person() { // 释放内存空间 delete[] address; } }; ``` 在上面的代码,我们定义了一个名为Person的结构体,其包含三个成员变量:name、age和address。address 是一个指向 char 数组的指针,它存储了一个地址字符串。接下来我们分别介绍如何在构造函数析构函数分配和释放 char 数组的内存空间: 1. 构造函数构造函数,我们首先计算出地址字符串的长度,然后使用 new 运算符分配内存空间。在分配内存空间之后,我们使用 strcpy 函数将地址字符串复制到内存空间。这样就完成了内存空间的分配和数据的复制。 2. 拷贝构造函数 在拷贝构造函数,我们首先计算出要复制的地址字符串的长度,然后使用 new 运算符分配内存空间。在分配内存空间之后,我们使用 strcpy 函数将地址字符串复制到内存空间。这样就完成了内存空间的分配和数据的复制。 3. 析构函数析构函数,我们使用 delete 运算符释放内存空间。由于 address 是一个 char 数组的指针,所以我们需要使用 delete[] 运算符来释放内存空间。这样就完成了内存空间的释放。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值