天天看点

C++ 笔记(2)结构体和类

个人声明:本文仅作为作者本人记录学习过程遇到的问题以及对这些问题的思考,作者也会随着学习进度进行相应的修改。为了避免误人子弟,请所有读者在阅读本文内容时,时刻保持怀疑的态度,用批判性眼光阅读!

1.使用结构体和类分别实现【堆栈存储】的区别

结构体实现

#include <iostream>
using namespace std;

//堆栈的数据对象集
typedef int Position;
struct SNode {
    ElementType *Data; /* 存储元素的数组 */
    Position Top;      /* 栈顶指针 */
    int MaxSize;       /* 堆栈最大容量 */
};
//堆栈的操作集(函数声明)
typedef struct SNode *Stack;
Stack CreateStack( int MaxSize );
bool IsFull( Stack S );
bool Push( Stack S, ElementType X );
bool IsEmpty( Stack S );
ElementType Pop( Stack S );
           

类实现

#include <iostream>
using namespace std;
//自定义堆栈类,存储数据类型可变(模板)
template <typename T>
class Stack{
private:	//数据对象集 
    T *Data;
    int Top;
    int MaxSize;
public:		//操作集
    void CreatStack( int MaxSize );
    bool IsFull();
    bool Push( T X );
    bool IsEmpty();
    T Pop();
};
           

在学习C++基础知识的时候,我就有听到一个说法“结构体是特殊的类”,因为从【包含成员】的角度来看,结构体和类都有【数据成员】,唯独少了【函数成员】。且不论这句话本身是对是错(希望读者也不要盲目肯定或否定),接下来我将由此出发,对结构体和类的区别做一些分析。

主要相同点:

  1. 都可以自由定义其数据成员(数量上、数据类型上的自定义)
  2. 结构体和类在定义后都需要实例化(即创建对象)后再进行使用。

主要区别:

  1. 相比结构体,类除了包含数据成员,还可以包含函数成员。即:类(数据对象集+操作集),结构体(数据对象集)。
  2. 类的成员(数据、函数)都可以限定访问权限(private、public、protected),而结构体中的成员在其生命周期内都可以直接访问。

2.访问成员运算符 “.” 和 “->”的区别

结合上文提到的结构体和类的区别,我们要想使用结构体或者类中的成员时,都需要一个操作【调用】。而一般我们就是用访问成员运算符来调用数据成员和函数成员。

目前就我了解,“.”运算符用于“对象的成员调用”,而“->”用于“对象指针的成员调用”。举个例子:

//此处用结构体说明(类也是同理,只不过类有访问权限的概念,说明起来比较麻烦)
typedef struct Student* PStu;
struct Student{
	char name[10];	//姓名
	int stuID;	//学号
	double score;	//成绩
};
//1. 首先我们创建一个学生对象和对象指针
Student stu1;
PStu pstu1;
//2. 通过对象访问其数据成员(姓名、学号、成绩)
stu1.stuID = 9527;	//学号赋值
stu1.score = 710;	//修改英语六级分数
//3. 通过对象指针访问其数据成员
cout << pstu1->stuID << endl;
cout << pstu1->score << endl;
           

这就是这两个成员运算符的使用区别了。

未完待续…