class,struct与union异同

    技术2025-10-11  4

    struct和class区别:在struct中,默认的访问级别是public,如果不特别指定级别,则结构体中的数据和函数均为公共接口,而在class默认的访问级别是private,其余之时:struct和class是等价 !

    另外 : unio也可以包含函数(构造函数和析构函数)和变量!

    下面给出一个例子:

    <1> : 先写一个class的程序:在下面的程序创建一个person类,作为基类,另外创建student类,该类公共继承person类.

    #include<iostream>using namespace std;

    class person{private: int old;public : person(){  cout<<"person class instance created !"<<endl; } int getold(); void setold(int mold); void outdata(); ~person();};int person::getold(){ return old;}void person::setold(int mold){ old=mold;}void person::outdata(){ cout<<"instance old : "<<old<<endl;}person::~person(){ cout<<"person instance class destruction !"<<endl;}

    class student :public person{private: int old; double score;public : student(){  cout<<"student instance created !"<<endl; } int getold(); void setold(int mold); int getscore(); void setscore(int mscore); void outdata(); ~student();};

    int student::getold(){ return old;}void student::setold(int mold){ old=mold;}void student::setscore(int mscore){ score=mscore;}int student::getscore(){ return score;}student::~student(){ cout<<"student class instanc destruction !"<<endl;}void student::outdata(){ cout<<"student old : "<<old<<endl<<"student score : "<<score<<endl;}void main(){

     person man; student stu1; man.setold(100); man.outdata(); stu1.setold(102); stu1.setscore(95); stu1.outdata();

    }

    运行结果显而易见,可参考如片class.jpg

    如果将上面的public,和private关键字全部去掉,程序编译将会出错,因为默认均将为private类型,而private的数据和函数是不能在class外面调用的.

    <2> : 下面可以将上面的程序中class关键字改为struct既可以通过编译,运行结果完全相同,但是如果将程序中的public和private关键字全部去掉,程序同样可以通过编译,运行结果是相同,这是因为struct结构体中的数据和函数全部默认为public,如果不显示指明,所有数据和函数均可以被结构体以外的地方被访问.

    #include<iostream>using namespace std;

    struct person{private: int old;public : person(){  cout<<"person class instance created !"<<endl; } int getold(); void setold(int mold); void outdata(); ~person();};int person::getold(){ return old;}void person::setold(int mold){ old=mold;}void person::outdata(){ cout<<"instance old : "<<old<<endl;}person::~person(){ cout<<"person instance class destruction !"<<endl;}

    struct student :public person{private: int old; double score;public : student(){  cout<<"student instance created !"<<endl; } int getold(); void setold(int mold); int getscore(); void setscore(int mscore); void outdata(); ~student();};

    int student::getold(){ return old;}void student::setold(int mold){ old=mold;}void student::setscore(int mscore){ score=mscore;}int student::getscore(){ return score;}student::~student(){ cout<<"student class instanc destruction !"<<endl;}void student::outdata(){ cout<<"student old : "<<old<<endl<<"student score : "<<score<<endl;}void main(){

     person man; student stu1; man.setold(100); man.outdata(); stu1.setold(102); stu1.setscore(95); stu1.outdata();

    }

    <3> : 如果这对第一个程序将person或者student其中一个改为struct,程序同样可以通过编译,这说明struct和class在除上面说明的之外,完全是相同!

    <4> :另外对union类型:

    #include<iostream>#include<string.h>using namespace std;

    class person{private: int old;public : person(){  cout<<"person class instance created !"<<endl; } int getold(); void setold(int mold); void outdata(); ~person();};int person::getold(){ return old;}void person::setold(int mold){ old=mold;}void person::outdata(){ cout<<"instance old : "<<old<<endl;}person::~person(){ cout<<"person instance class destruction !"<<endl;}

    class student :public person{private: int old; double score;public : student(){  cout<<"student instance created !"<<endl; } int getold(); void setold(int mold); int getscore(); void setscore(int mscore); void outdata(); ~student();};

    int student::getold(){ return old;}void student::setold(int mold){ old=mold;}void student::setscore(int mscore){ score=mscore;}int student::getscore(){ return score;}student::~student(){ cout<<"student class instanc destruction !"<<endl;}void student::outdata(){ cout<<"student old : "<<old<<endl<<"student score : "<<score<<endl;}

    union GG { int id; GG(){  cout<<"union created !"<<endl; } void setid(int mid){  id=mid; } void outdata(){  cout<<"GG id : "<<id<<endl; } ~GG(){  cout<<"union destrction !"<<endl; }};

    void main(){

     person man; student stu1; GG g; man.setold(100); man.outdata(); stu1.setold(102); stu1.setscore(95); stu1.outdata(); g.setid(200); g.outdata();

    }

    从上面程序看,union实质上默认的也是public,同样也可以指定private.但是要注意:

    GG联合体采用继承某个class时:

    即:union GG :public person{...}

    编译时会报错:

    C:/Program Files/Microsoft Visual Studio/MyProjects/dfg/cgh.cpp(66) : error C2570: 'GG' : union cannot have base classes

    即联合体不支持继承机制!

     

    上面程序均用VC6.0++编译编写器编译!

    如有错误请指出... ...

    最新回复(0)