一直以来对struct 结构体用的不多,但是最近看了一点关于struce的资料,自己动手试了下感觉C 和C++ 之间struct的区别还是蛮大的。
先介绍一般的struct的结构:
struct 结构体名{
.....
} 结构体变量名;
这里 结构体名和结构体变量名之间的区别。就是你可以直接使用结构体变量名当做实例。结构体名是来定义结构体的。
比如:
struct student {
char* name;
// int num;
} stu1,stu2;
int main()
{
struct student stu;
stu.name; // 必须先定义
stu1.name; //直接使用
return 0;
}
C语言中因为没有对象的概念,所以没有任何private public protected 的概念. 而struct成员 的默认使用权限就是类似于public.并且是没有成员函数的,只有成员变量.
而C++ 中 struct 可以这么用:
#include <iostream>
using std::cout;
using std::endl;
struct school
{
protected:
// virtual void iname() const =0;
virtual void iname() const{}// 虚函数必须定义 纯虚函数可以只声明
};
struct student :public school
{
void iname(){
cout<<"i named virtual!"<<endl;}
}stu1;
int main(){
stu1.iname();
return 0;
}
这样感觉 struct和class相比的话,差别并不是很大。struct也可以定义虚函数和继承,但是这里定义纯虚函数的struct student 好像不可以实例化。 难道是抽象类的影响??不知道.这是一个问题
这里是对struct知识的一个小小的整理吧。
顺便补充一个小知识点:
string类是C++中才定义的,#include<string>.所以C 中是没有string的,
而C中可以使用 typedef char* string; 来使用string.