概述
浅谈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关键字所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复