【总结】知识点巩固-------struct和class

C/C++ struct 结构体定义 用法详解
在C语言中,定义一个结构体类型要用typedef :

typedef struct point 
{    
    int x;
    int y;
}
Point;

 

在声明变量的时候就可以:Point p1;
如果没有typedef, 如:

struct point {
    int x;
    int y;
};


在声明变量的时候就必须用:struct point p1;
Point是struct point的别名。
也可以省去point,如下:
 

typedef struct {
    int x;
    int y;
}Point;

在C++里,用法比C语言简单

struct Point {    
    int x;
    int y;
};


定义了一个结构体类型Point,声明变量时直接Point p1;

如果使用typedef,又会造成区别
 

struct Point {
    int x;
    int y;
}p1;//p1是一个结构体变量
typedef struct Point {
    int x;
    int y;
}p2;    //p2是一个结构体类型

在 C中,struct不能包含函数 
在C++中,对struct进行了扩展,可以包含函数。 (默认public)
在C++中,之所以包含两种定义方式,主要是为了兼容C语言。

struct和class区别与联系

关于使用大括号初始化
class和struct如果定义了构造函数的话,都不能用大括号进行初始化
如果没有定义构造函数,struct可以用大括号初始化。
如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。

关于默认访问权限 
class中默认的成员访问权限是private的,而struct中则是public的。

关于继承方式 
class继承默认是private继承,而struct继承默认是public继承。

为什么在C++中存在struct?很多人都会想到这是为了让C++和C兼容,那么问题就是如何使用C++中的struct和C兼容起来。

把C++要交换到C程序的数据在C++程序中声明成一个struct,然后根据C++中程序的语意选择继承或者聚合这个struct,然后在使用的时候就可以把这个struct封装起来传递到C中或者从C中传递到C++。(注:在深入探索C++对象模型中建议使用聚合,而不是继承,原因是为了和C语言的空间分布兼容,因为在C++引入虚函数,虚继承导致了派生类的空间包括struct的空间和vptr、vbtl,而且vptr、vbtl存放在哪里由编译器自己决定,C++标准中没有定义)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值