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内)。