`
庚午子
  • 浏览: 15360 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

c++中struct与class的不同

c++ 
阅读更多

 

 

c++中struct与class除了关键字不同之外,更重要的是成员控制权限的差异,目前了解的仅此而已。

代码就是王道:

成员变量的默认访问权限不同——struct默认为public,而class默认为private

 

 

#include<iostream>

#include<stdio.h>

#include<malloc.h>

#include<string.h>

using namespace std;

enum Breed {SHIZIGOU,JUANMAOGOU,MUYANGQUAN};

struct Mamal

{

private: int age;

public :

void speak()

{cout<<"speaking"<<endl;}

void sleep()

{cout<<"sleeping"<<endl;}

Mamal():age(4) {}

~Mamal(){}

};

struct Dog:public Mamal

{

int a;

private: Breed dogbreed;

public :

Dog():dogbreed(SHIZIGOU),a(3){}

~Dog(){}

void getdogbreed()

{cout<<dogbreed<<endl;}

};

int main()

{

   Dog dd;

   dd.speak();         //访问基类的成员函数

   dd.getdogbreed();           //必须通过公有接口访问私有成员

   cout<<dd.a<<endl;     //成员a默认为公有

}

-----------------------------------------------------------------------------

 

 

然而,标准的C中是不支持结构体中放置函数成员的,要想在C语言中实现这一功能,需要借助函数指针,例子如下:

 

首先,要确认的一点是C中的struct通过函数指针来调用函数,但函数指针不同于成员函数。之所以有这个问题,是因为C++中的struct已经基本具备“类”的功能,可以有成员函数,且struct具有继承属性。

代码就是王道,以下为正确的演示

#include   

void fun()  

{  

 printf("hello,world ");  

}  

struct test  

{  

 void (*Fun)();  

}; 

int main()  

{  

 struct test _t;  

 _t.Fun = fun;  

 (*_t.Fun)();  

 return 0;  

****************************以下为错误的演示**********************************

#include   

struct test  

{   

      void fun(){printf("hello,world ");}

}; 

int main()  

{  

 struct test _t;   

 _t.fun();

 return 0;  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics