C++类和结构体的区别

经测试(编译环境为VC6.0),发现C++结构体与类只有一个区别,就是类默认的成员是private,结构体默认的成员是public。

结构体可以定义public、private、protected,可以定义static成员。可以定义构造和析构函数。也可以继承,也可以定义虚函数。

例程如下:

#include "stdafx.h"
typedef struct st_father
{
int m_iValueOne;
st_father(){
printf("st_father 构造\r\n");
m_iValueOne = 10;
}
virtual ~st_father(){
printf("st_father 析构\r\n");
}
void st_father_public()
{
printf("st_father_public \r\n");
}
virtual void st_virtual()
{
printf("st_father st_virtual\r\n");
}
void TEST()
{
printf("st_father TEST\r\n");
}
private:
int m_iValuePrivate;


static int m_iValueStatic;


void st_father_private()
{
printf("st_father_private \r\n");
}
protected:
void st_father_protected()
{
printf("st_father_protected\r\n");
}


}ST_FATHER;


typedef struct st_son: public st_father
{
st_son()
{
printf("st_son 构造\r\n");
}


~st_son()
{
printf("st_son析构\r\n");
}


virtual void st_virtual()
{
printf("st_son st_virtual\r\n");
}


void TEST()
{
printf("st_son TEST\r\n");
}
}ST_SON;




int main(int argc, char* argv[])
{
ST_FATHER st_father;
ST_SON st_son;


ST_FATHER* p;


printf("st_father.m_iValueOne = %d\r\n", st_father.m_iValueOne);


//private成员不能访问,结构体默认是public,类默认是private
//printf("st.m_iValuePrivate = %d\r\n", st.m_iValuePrivate);


//结构体中也可以定义虚函数,也可以定义static变量
printf("sizeof(ST_FATHER) = %d\r\n", sizeof(ST_FATHER));


//外部也是只能调用public方法
st_father.st_father_public();
//st_father.st_father_protected();
//st_father.st_father_private();
st_father.st_virtual();
st_son.st_virtual();
p = &st_father;
p->st_virtual();
p = &st_son;
p->st_virtual();


return 0;
}

发布了24 篇原创文章 · 获赞 24 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览