首页 > 试题广场 >

在C++中,定义结构体类型struct时不能有成员函数,只有

[单选题]

C++中,定义结构体类型struct时,不能定义成员函数,只有class可以定义成员函数。

  • 正确
  • 错误

C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。
struct能包含成员函数吗? 能!
struct能继承吗? 能!!
struct能实现多态吗? 能!!!
 

既然这些它都能实现,那它和class还能有什么区别?

最本质的一个区别就是默认的访问控制: 

默认的继承访问权限

struct是public的class是private的

发表于 2017-05-18 15:43:15 回复(5)
1. 字面上的区别

在字面上struct是structure的缩写,通常叫做“结构体”,在C语言里用于将多种数据、多个变量组织在一起,便于表达比较复杂的数据类型,在C++中为了兼容C语言保留了该关键字,并且保留了C语言中的所有功能。

而class,则称作“类”,是C++新增来支持面向对象思想概念中“类”的概念的一个关键词,并且比struct具有了更强大的功能,不仅可以像C语言中的struct一样把数据组织在一起,还可以将与数据相关的方法组织在一起,并增加了如虚函数、继承等特性来支持面向对象编程。

虽然在字面上struct与class的含义不一样,但在C++中其功能基本是相同的,C++中的struct不仅可以包含数据成员,而且与class一样支持新增的面向对象特性,仅在以下细节上有略微差别。

既然两者在字面上不一样,为了更好地利用这一点,建议在C++中使用struct时仍然只使用C中的特性,来表示一些复杂的数据而不进行方法的封装,这样还可以提高软件的可读性。

2. 默认成员权限区别

struct的成员默认权限是public,而class的成员默认权限是private。例如:

struct Sb{ void f( void ) { } };
struct Sc : Sb{ };
class Cb{ void f( void ) { } };
class Cc1 : public Sb{ };
class Cc2 : Sb{ };
sb.f(); // 合法
cb.f(); // 不合法,因为在Cb类中f( )函数默认为private,此处不可访问

建议在工程代码中显示声明成员的权限,而有使用默认权限,因为并不是所有人都知道这一点。

3. 默认继承方式

struct的默认继承方式为public,而class的默认继承为private,例如:

Sc sc; Cc1 cc1; Cc2 cc2;
sc.f(); // 合法
cc1.f(); // 合法,因为Cc1显示地使用public继承
cc2.f(); // 不合法,Cc2默认private继承自Sb,在Cc2中f( )为private
在C语言中struct不可以继承,虽然我们知道在C++中struct可以继承,但在实际使用中,在不需要继承的场合我们使用struct,而在需要继承的场合使用class,这样更贴近其字面意思,使程序有更好的可读性。

虽然知道class的默认继承为private,但并不是项目组的每个人都清楚这一点,建议在工程代码中不省略private,使代码可读性更强。

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,因为这样读起来更接近人类语言,更具有可读性。

发表于 2017-12-07 17:29:07 回复(0)
C++的struct可以有方法(函数),但是C的没有
发表于 2018-12-26 10:57:32 回复(0)

1. struct,union 和class的区别

struct(结构体)是一种用户自定义的数据类型,可以包含多个不同类型的成员变量,这些变量在内存中是连续存储的。struct可以有成员函数C不可以,但默认为public访问权限。

union(联合)是一种特殊的数据类型,允许在同一内存位置存储不同类型的数据。union的成员变量共享同一块内存空间,只能同时存储其中一个成员的值。union没有成员函数,只能通过成员变量来访问。

class(类)是一种用来描述对象的模板,可以包含成员变量和成员函数。class的成员变量和成员函数可以有不同的访问权限(如public、private、protected)。class的成员变量在内存中是按照其定义顺序存储的,而成员函数是存储在代码段中的。

发表于 2023-10-30 14:26:03 回复(0)
c++的struct可以有方法
发表于 2022-01-23 15:23:35 回复(0)
曹帅乐,在C++中!
发表于 2020-10-25 14:43:48 回复(0)
注意给定的是C++,而不是C,C中struct不允许
发表于 2018-10-16 23:01:31 回复(0)
C++的struct可以有方法(函数),但是C的没有
发表于 2018-03-22 17:14:35 回复(0)