C++的类与C语言结构体比较

C++的类与C语言结构体比较

一、结构体,类的介绍

1.C语言的结构体
由于普通数据分配内存不集中,寻址效率不高,而且对数组赋初值时容易发生错位,结构零散不易管理。
所以诞生了结构体这一种数据类型,它由若干成员组成,每一个成员可以是一个基本数据类型,也可以是一个构造数据类型

比如最简单一个结构体数据类型:

struct student//结构体名称为student
{	
	char name[20];
	int nYear;
	struct date
	{ 
		int day;
	}db; //db是student结构体下,date结构体下的一个变量
}

补充: 还可以借助函数指针实现包含一个函数到结构体中:具体参考:
C语言结构体中如何包含函数
在这里插入图片描述

2.C++的类

不同于C语言的结构体(只包含变量,不包含函数),C++的类是一种集成了数据和对数据处理的函数的数据体。类里面的数据,函数分别叫做类的成员数据,类的成员函数。
比如:

class data//类的名称为data
{
private://private下包含变量
    int year;
    int month;
    int day;
public://public下包含函数:初始化函数和输出函数display
    data(int yy,int mm,int dd)//变量初始化方法的初始化函数
    {
        year=yy;
        month=mm;
        day=dd;
    }
    void display()//输出生日
    {
        cout<<"birthday:"<<year<<"-"<<month<<"-"<<day<<endl;
    }
};

二、结构体和类的具体区别

1.内容上:

如上所述:

  • 1.类里面包含了基本数据类型和对基本数据类型处理的函数(注意是对基本数据类型处理的函数,譬如上面的display()函数操作对象是year,month,day而非yy,mm,dd),分别在private和public下。

  • 2.而结构体只是包含了基本数据类型或者是结构体类型,总之都是数据类型,没有函数。

2.对数据进行初始化的方法:

1.C语言对结构体数组初始化(必须要在定义时初始化):

struct student sStu[5]={
{},
{},
...
};

调用数据方法和赋值方法是:
结构体变量名-1+.+(结构体变量名-2+.)+对应变量

struct student//结构体名称为student
{	
	char name[20];
	int nYear;
	struct date
	{ 
		int day;
	}db; //db是student结构体下,date结构体下的一个变量
}struct student sStu[5]={
{},
{},
...
};
scanf("%s %d %D",&sStu[c].name,sStu[c].nYear,sStu[c].db.day);

2.C++的类的初始化——构造函数

上面说过,C++的类中可以包含函数,在public中,那么专门负责给类里的数据初始化的函数就叫做构造函数。
有直接初始化和参数初始化两种:

class sum
{
private:
    int a,b;
public:
    sum()//直接对类中数据初始化
    {
        a=1;
        b=2;
    }
    sum(int x,int y)//借助参数对类中数据初始化
    {
        a=x;
        b=y;
    }
    void add()//其他函数
    {
        cout<<"sum="<<a+b<<endl;
    }
};

三、类和结构体的相似之处

1.调用方面

#1.相似
结构体和类的调用都需要借助“ . ”这一符号。
#2.不同
结构体的调用只用到了其中的数据,而类的调用还可以直接调用类中的函数。
比如承接上面的程序的主函数:

int main()
{
    sum s1;//定义类的一个对象,名字为s1
    sum s2(1,2);//定义类的一个对象,名字为s2,同时使用参数初始化法
    s1.add();//类中函数的调用
    s2.add();
}

2.名称方面

结构体中我们称呼的结构体变量,在类中我们则是称呼其为对象。
结构体变量下属多个数据类型,而对象中既有数据(private内),又有对数据操作的函数(public内)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值