注册 登录
编程论坛 C++教室

[求助]C++中类与结构的区别

逸凡 发布于 2006-09-22 08:46, 1765 次点击
各位大虾,我是一个C++初学者,看到类和对象这一章时,弄不明白类和结构有什么区别。书上说结构集合了数据,而类集合了数据和函数,比机构功能更强大。但我把类换成结构,发现在结构中也能包括函数成员,因此有点迷糊。希望各位大虾不吝赐教,谢谢!!!
13 回复
#2
myajax952006-09-22 09:08
在C++中没什么区别。唯一的一点是:struct中的变量被默认为public的,而class中默认为private的。但只要你在struct或private里写的public,protected,private关键字之后就没区别了。
#3
踏魔狼2006-09-22 09:39
类支持"继承性", 这个特性结构是没有的. 就是因为这个"继承性"它还有更强的"多态性".
#4
song42006-09-22 09:56

加一些补充
在模版中,类型参数前面可以使用class或typename,如果使用struct,则含义不同,struct后面跟的是“non-type template parameter”,而class或typename后面跟的是类型参数。
class和struct如果定义了构造函数的话,都不能用大括号进行初始化

  如果没有定义构造函数,struct可以用大括号初始化。

  如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。
《转》

#5
myajax952006-09-22 11:39
以下是引用踏魔狼在2006-9-22 9:39:48的发言:
类支持"继承性", 这个特性结构是没有的. 就是因为这个"继承性"它还有更强的"多态性".

struct 和 class 都支持继承性,这点上没有区别。试一下下面的程序就知道了。
struct Base
{
public:
virtual void print() {cout << "Base" << endl;}
};

struct Derived : public Base
{
virtual void print() {cout << "Derived" << endl;}
};

int main(int argc, char* argv[])
{
Derived d;
Base *pb = &d;

pb->print();

return 0;
}

#6
myajax952006-09-22 11:52
以下是引用song4在2006-9-22 9:56:50的发言:

加一些补充
在模版中,类型参数前面可以使用class或typename,如果使用struct,则含义不同,struct后面跟的是“non-type template parameter”,而class或typename后面跟的是类型参数。
class和struct如果定义了构造函数的话,都不能用大括号进行初始化

  如果没有定义构造函数,struct可以用大括号初始化。

  如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。
《转》

可以用大括号括起来的叫aggragate type。无论class还是struct都可以。条件是没有base class,没有子定义constructor,没有virtual function,没有private和protected成员。

#7
踏魔狼2006-09-22 12:09

我以前从来没有用结构来继承. 它还真的用.

#8
踏魔狼2006-09-22 12:18
但它的继承限制已经没有效了.
#9
majia7752006-09-22 13:22
在C++中,结构是简单的"类",以后开发的时候,还是用类比较多,一般C++书籍都把结构的放在前面讲,让读者先熟悉一下,这样对于后来学习类有帮助,结构和类是兄弟.
#10
lundon2006-09-24 21:59
学习学习

#11
DEMON_HUNTER2006-09-25 17:35

struct Derived : public Base
{
virtual void print() {cout << "Derived" << endl;}//虚函数在继承时,父类中加关键字virtual,子类中不必加
};

#12
corrupt2006-09-25 18:55

没区别,除了 默认的不同罢了

#13
baisea20012006-09-30 08:35
就这么点区别????
#14
逸凡2007-04-04 16:23
呵呵,谢谢各位大虾的热心帮助,本人终于搞懂了他们的区别。
1