C++学习笔记6:结构体struct

定义结构

struct语句用法

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是一种更简单的定义结构的方式,可以为创建的类型取一个"别名"。

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 不可以。

你可能感兴趣的:(C++)