正如我们所知,结构体是一个多种数据类型的组合,和labview中簇的数据类型有点相似,同样都是讲大一堆数据类型进行打包,然后作为某个变量的属性。
类和结构体有些相似,但是类又多了函数,但是不论怎样,它都是一坨属性的集合,在结构体变量和类对象定义的时候,有很多相似的地方。
class LinkNode
{
public:
//ElemType data;
int data;
LinkNode *next;
};
定义完类之后,我们尽量使用typedef 来进行类的类型重新定义,以方便我们和常用数据类型变量定义时做对比。
typedef LinkNode * POINT; //定义数据类型POINT为LinkNode 指针类型
typedef LinkNode LN; //定义数据类型LN为LinkNode类类型
那么我们在接下来使用POINT和LN类型时,可以就像
int a;
int *p;
这样定义变量了,当然,我们下面定义的是类的对象,但是形式上变量的定义是一致的:
LN *P1; //LN类型对象的指针定义方式(这种是我自己发现的,自己还没有在程序中看到别人这样定义的)
POINT P2;//POINT 也就是LinkNode类对象的指针,同P1一样的
LN L1;//LinkNode 类的对象,所以如下操作才是正确的:
L1.data=123;
P2=&L1;
P1=P2;
cout<<P1->data<<endl;
同样地,结构体变量的定义也有如下一致的操作:
struct MyStruct
{
int data;
char name;
};
typedef MyStruct * PointM;
typedef MyStruct MS;
MS *PM1;
PointM PM2;
MS M1;
M1.data=4565;
PM2=&M1;
PM1=PM2;
cout<<PM1->data<<endl;
结构体变量本身就是变量,所以这种和常规变量定义一致的操作更加好记。
最后,整体win32控制台程序整体如下:
// SLinkListTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
int *p;
//template<typename ElemType>
class LinkNode
{
public:
//ElemType data;
int data;
LinkNode *next;
};
struct MyStruct
{
int data;
char name;
};
typedef LinkNode * POINT;
typedef LinkNode LN;
typedef MyStruct * PointM;
typedef MyStruct MS;
int _tmain(int argc, _TCHAR* argv[])
{
LN *P1;
POINT P2;
LN L1;
L1.data=123;
P2=&L1;
P1=P2;
cout<<P1->data<<endl;
MS *PM1;
PointM PM2;
MS M1;
M1.data=4565;
PM2=&M1;
PM1=PM2;
cout<<PM1->data<<endl;
system("pause");
return 0;
}