结构体的区别
-
类型上不再需要struct关键字,直接用结构体名即可
-
c++结构体中允许函数存在
-
在结构体中声明,在结构体外实现(当然也可以在结构体中实现)
-
c++结构体中的函数中访问数据可以直接访问
-
在c++没有写构造函数 / 权限限定的时候,结构体用法和c语言一样,结构体里面没有访问权限问题,类里面有访问权限问题,写了构造函数下面代码会报错
类的内容
把函数称为行为 / 方法 → 成员函数 → 描述一个对象的行为
把数据称为属性 / 特性 → 数据成员
struct MM //定义结构体和c语言一样
{
void print()
{
cout<<name<<"\t"<<age<<endl;//在结构体声明,在结构体中实现
}
void printData(); //在结构体中声明,在结构体外实现
char name[20];
int age;
}
void MM::printData()
{
cout<<name<<"\t"<<age<<endl;/*用结构体名限定,告诉编译器这个函数来自哪里*/
}
在c++中用结构体名定义变量即可,不再需要struct关键字
int main()
{
struct MM mm; //用c语言的方式也可以
MM mm; //用c++的方式
}
学会调用
和数据成员访问方式是一样的
-
对象(结构体变量).成员
-
对象指针->成员
-
(* 对象指针).成员
struct MM
{
char name[20];
int age;
void print()
{
cout<<name<<"\t"<<age<<endl;//在结构体声明,在结构体中实现
}
void printData(); //在结构体中声明,在结构体外实现
};
void MM::printData()
{
cout<<name<<"\t"<<age<<endl;
}
int main()
{
struct MM girl={"小芳",18}; //用girl对象调用函数,打印的内容就是girl中的内容
MM mm={"小丽",24}; //用mm对象调用函数,打印的内容就是mm中的内容
girl.print(); //小芳 18
(&mm)->printData(); //小丽 24
//指针方式
MM* p=&mm;
p->printData(); //小丽 24
}
结构体中的变量必须要通过结构体变量(结构体指针,结构体数组)的方式访问
c++结构体中的函数访问属性不需要,可以直接访问,在结构体外访问必须要通过结构体变量访问
//通过外部函数修改数据(修改年龄)
int &getAge() //提供返回引用的函数
{
return age;
}
int main(){
struct MM girl={"小芳",18};
MM mm={"小丽",24};
MM* p=&mm;
p->printData(); //小丽 24
p->getAge()=25; //c++结构体不需要这样修改数据,只要有结构体变量就可以在外面直接访问
p->printData(); //小丽 25
p->age=18; //小丽 18
p->printData();
}
在c++中定义结构体数组
不需要struct关键字,其他都一样
MM array[3];//定义一个结构体数组