精英盒子 -> 程序设计 -> C++中的class和struct. [打印本页]

zzh8829 2012-06-10 07:37

C++中的class和struct.

有没有必要在C++代码里把class换成struct....

貌似某高人说class里所有的变量都应该private...

我指的是你astar的代码....

jybox 2012-06-10 10:27
标题给你改了一下

class和struct的区别:
struct来自C语言,语义是一个结构体
class来自C++,语义是一个类
在C++中,他们的区别只有:class默认所有成员私有(private),struct默认所有成员公有(public)

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

“貌似某高人说class里所有的变量都应该private...”
这种说法应该算是正确的,这属于设计风格方面的,不必必须遵守
他的意思是,例如你的类里面有一个叫value的变量,例如:

class A
{
public:
    int value;
}

你把value设置成了公有,任何人都可以去修改它,而且什么时候value被修改了,类A本身并不知道
而且其他人(类)还可以把value设置成非法的值,例如如果value表示一个长度,那么负数对它来说就是非法值了

所以,(按照那位高人的观点)不应该把变量设置为public,你可以这样来解决:

class A
{
public:
    int getValue()
    {
        return value;
    }
    void setValue(int value)
    {
        if(value > 0)//判断值的有效性
        {
            this->value=value;
            xxxxx();//还可以触发一些任务
        }
    }
private:
    int value;
}

这样,可以在设置值的时候判断值的有效性、触发一些任务(如果需要的话),在获取值的时候也可以触发一些任务(如果需要的话)

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

当然,这不是规定,只是一些人的看法,我个人来讲还是同意这位高人的这个观点的
但是很显然,这种写法会让代码很复杂,所以通常来讲,我只有编写一些给别人用的库的时候,且需要检查取值有效性、触发任务的时候才会这么写

至于竞赛,快是比较首要的,顾不得那么多了

zzh8829 2012-06-10 21:19
class public: = 12 chars...|struct  = 6 chars...|
速度提升50%

jybox 2012-06-10 22:02
zzh8829:class public: = 12 chars...|struct  = 6 chars...|
速度提升50% [表情] (2012-06-10 21:19) 

对编译器来说都一样,尤其是带优化器的

嗯...我的编译器有补全.....

幻の上帝 2012-06-14 13:31
jybox:标题给你改了一下
class和struct的区别:
struct来自C语言,语义是一个结构体
class来自C++,语义是一个类
....... (2012-06-10 10:27) 

不止是成员,还有继承的访问权限也一样。

幻の上帝 2012-06-14 13:32
jybox:对编译器来说都一样,尤其是带优化器的
嗯...我的编译器有补全..... (2012-06-10 22:02) 

访问权限在编译时检查以后就没了,不干预代码生成,和优化器不应该有关系。




Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.053848 second(s),query:5 Gzip enabled