struct 语句定义了一个包含多个成员的新的数据类型,格式如下:
struct type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;
type_name 是结构体类型的名称,member_type1 member_name1 是标准的变量定义,比如 int i。
在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量。
#include
#include
using namespace std;
// 声明一个结构体类型 Books
struct Books{
char title[50];
char author[50];
int book_id;
};
int main( ){
Books Book1; // 定义结构体类型 Books 的变量 Book1
// Book1 详述
strcpy( Book1.title, "C++ 教程");
strcpy( Book1.author, "Runoob");
Book1.book_id = 12345;
// 输出 Book1 信息
cout << "第一本书标题 : " << Book1.title <<endl;
cout << "第一本书作者 : " << Book1.author <<endl;
cout << "第一本书 ID : " << Book1.book_id <<endl;
return 0;
}
可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。
#include
#include
using namespace std;
void printBook( struct Books book );
// 声明一个结构体类型 Books
struct Books{
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main( )
{
Books Book1; // 定义结构体类型 Books 的变量 Book1
// Book1 详述
strcpy( Book1.title, "C++ 教程");
strcpy( Book1.author, "Runoob");
Book1.book_id = 12345;
// 输出 Book1 信息
printBook( Book1 );
return 0;
}
void printBook( struct Books book ){
cout << "书标题 : " << book.title <<endl;
cout << "书作者 : " << book.author <<endl;
cout << "书 ID : " << book.book_id <<endl;
}
可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似。
struct Books *struct_pointer;
现在,可以在指针变量中存储结构变量的地址。
struct_pointer = &Book1;
为了使用指向该结构的指针访问结构的成员,必须使用 -> 运算符,如下所示:
struct_pointer->title;
#include
#include
using namespace std;
void printBook( struct Books *book );
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main( )
{
Books Book1; // 定义结构体类型 Books 的变量 Book1
// Book1 详述
strcpy( Book1.title, "C++ 教程");
strcpy( Book1.author, "Runoob");
Book1.book_id = 12345;
// 通过传 Book1 的地址来输出 Book1 信息
printBook( &Book1 );
return 0;
}
// 该函数以结构指针作为参数
void printBook( struct Books *book )
{
cout << "书标题 : " << book->title <<endl;
cout << "书作者 : " << book->author <<endl;
cout << "书类目 : " << book->subject <<endl;
cout << "书 ID : " << book->book_id <<endl;
}
.(点)运算符和 ->(箭头)运算符用于引用类、结构和共用体的成员:
点运算符应用于实际的对象。
箭头运算符与一个指向对象的指针一起使用。
例如,假设有下面的结构:
struct Employee {
char first_name[16];
int age;
} emp;
. 点运算符
把值 zara 赋给对象 emp 的 first_name 成员:
strcpy(emp.first_name, "zara");
-> 箭头运算符
如果 p_emp 是一个指针,指向类型为 Employee 的对象,把值 zara 赋给对象 emp 的 first_name 成员:
strcpy(p_emp->first_name, "zara");
简而言之,访问结构的成员时使用点运算符,而通过指针访问结构的成员时,则使用箭头运算符。
typedef是一种更简单的定义结构的方式,可以为创建的类型取一个"别名"。
typedef struct Books
{
char title[50];
char author[50];
int book_id;
}Books;
可以直接使用 Books 来定义 Books 类型的变量:
Books Book1, Book2;
可以使用 typedef 关键字来定义非结构类型,如下所示:
typedef long int *pint32;
pint32 x, y, z;
x, y 和 z 都是指向长整型 long int 的指针。
(1)class 中默认的成员访问权限是 private 的,而 struct 中则是 public 的。
(2)从 class 继承默认是 private 继承,而从 struct 继承默认是 public 继承。
(3)class 可以定义模板,而 struct 不可以。