我是靠谱客的博主 高挑百合,最近开发中收集的这篇文章主要介绍struct 和class关键字,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

浅谈struct与class关键字
1 c/c++中struct的区别
首先struct是C语言中定义结构体时使用;
而在C++中则可以用来定义类,那它在C++中使用和c
中有什么区别呢,来看下面一段代码

#include   "stdio.h"  
void fun()    
{    
 printf("hello,world ");    
}    
struct test    
{    
  void (*Fun)();  //函数指针,通过它来调用函数 
};   
int main()    
{    
  struct test a;    
  a.Fun = fun;  //一定要这样让一个函数的地址赋值给结构的成员函数  
 (*a .Fun)();  //通过函数地址调用函数   

 return 0;    
}    

此时可以运行,而在换种方式

#include     

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

};   
int main()    
{    
  struct test _t;     

 _t.fun();  

 return 0;
 }    

(1)和上一个相比,这次直接将函数定义在了结构体内,但是并不能运行通过,因此struct在c中定义结构体时不能包含成员函数,只能有成员变量,而在c++中不仅可以有成员变量还可以有成员函数
代码如下:

#include<iostream>
using namespace std;
struct test
{
 void Fun();
 {}
 int a;
 };
 struct test a;
 a.Fun();

(2)结构体中嵌套结构体在计算其大小时

  • 在c中无论加不加结构体标签,编译器都会把它默认计算进去
  • 而在c++中若不加标签,编译器并不会把它计算进去,此时编译器会认为你只是声明了这个变量而并不是定义
    测试代码:
struct A
{
  double d;
  char c;
  int a;
  }
  //此时A的大小为16
  再来定义一个B
  struct B
  {
     struct A
      {
         double d;
         char c;
         int a;
      }c2;
      char c2;
  }
  //在C中无论写不写c2,结果都是24
  //而在c++中若不写c2,运行结果是1,编译器认为此时只有char c2

2 C++中struct和class关键字的区别
(1)在字面上struct定义的通常叫做“结构体”,在C语言里用于将多种数据、多个变量组织在一起,便于表达比较复杂的数据类型,在C++中为了兼容C语言保留了该关键字,并且保留了C语言中的所有功能。
而class,则称作“类”,是C++新增来支持面向对象思想概念中“类”的概念的一个关键词,它不仅可以像C语言中的struct一样把数据组织在一起,还可以将与数据相关的方法组织在一起,并增加了如虚函数、继承等特性来支持面向对象编程。
虽然在字面上struct与class的含义不一样,但在C++中其功能基本是相同的,C++中的struct不仅可以包含数据成员,而且与class一样支持新增的面向对象特性,仅在以下细节上有略微差别。
既然两者在字面上不一样,为了更好地利用这一点,建议在C++中使用struct时仍然只使用C中的特性,来表示一些复杂的数据而不进行方法的封装,这样还可以提高软件的可读性。
(2)默认成员权限不同
- struct的默认成员权限是public
- class的默认成员权限是private
但是实际定义时最好将成员权限显示定义出来
(3)3.默认继承方式
struct的默认继承方式为public,而class的默认继承为private
虽然知道class的默认继承为private,但并不是项目组的每个人都清楚这一点,建议在工程代码中不省略private,使代码可读性更强
(4)4.用于定义模板参数
模板为C++语言新增特性,C语言没有,只有class可用于定义参数,而struct不可以,例如:

template
class TValue
 {
private: T _v;
public: TValue(T v) : _v(v){}
T Get( void ) { return _v; }
};

此处只能使用class,不能使用struct。当然,此处还可以使用typename代替class,class与typename也仅在定义模板参数时可以互换,而且建议此时使用typename,因为这样读起来更接近人类语言,更具有可读性

最后

以上就是高挑百合为你收集整理的struct 和class关键字的全部内容,希望文章能够帮你解决struct 和class关键字所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部