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

如何区别struct 和 clas s呢?

vfdff 发布于 2008-08-30 11:19, 1884 次点击
#include <stdio.h>

struct value {
    int x;
};

class address {
public:
    int x;
};

void fun1(struct value v)
{
    v.x = 17;
}

void fun2(class address v)
{
    v.x = 17;
}

int main()
{
    struct value a,b;
    class address c,d;

    a.x = 12;
    b=a;
    c.x = 12;
    d=c;
    printf("a=%d,b=%d; c=%d,d=%d\n",a.x,b.x,c.x,d.x);

    b.x = 22;
    d.x = 22;
    printf("a=%d,b=%d; c=%d,d=%d\n",a.x,b.x,c.x,d.x);

    fun1(b);
    fun2(d);

    printf("a=%d,b=%d; c=%d,d=%d\n",a.x,b.x,c.x,d.x);
    return 0;
}
我使用上面的代码对 struct 和class 操作
发现他们之间没有什么区别,但是之前在书本上看到说
 struct 是值类型,而class 是引用类型,至少在做参数使用时应该由点区别的呀
为什么我找不到呢 ?
12 回复
#2
xmnathan2008-08-30 11:22
struct默认成员是public类型
class默认 为private吧   
#3
vfdff2008-08-30 13:19
回复 2# xmnathan 的帖子
这个是一个区别
但是怎么检验 值类型还是引用类型呢  ?
#4
中学者2008-08-30 22:49
在网上自己搜索吧..struct什么时候被识别为一个class。。。什么时候被识别为一个C风格的struct..
#5
elegant872008-08-31 09:58
#include <stdio.h>

struct value {
    int x;
};

class address {
public:
    int x;
};

void fun1(struct value v)
{
    v.x = 17;
}

void fun2(address &v)//此处就是一个引用
{
    v.x = 17;
}

int main()
{
    struct value a,b;
    class address c,d;

    a.x = 12;
    b=a;
    c.x = 12;
    d=c;
    printf("a=%d,b=%d; c=%d,d=%d\n",a.x,b.x,c.x,d.x);

    b.x = 22;
    d.x = 22;
    printf("a=%d,b=%d; c=%d,d=%d\n",a.x,b.x,c.x,d.x);

    fun1(b);
    fun2(d);

    printf("a=%d,b=%d; c=%d,d=%d\n",a.x,b.x,c.x,d.x);
    return 0;
}
#6
fengyun6882008-08-31 10:24
#7
vfdff2008-08-31 11:35
回复 5# elegant87 的帖子
我只要想表达的是 class address c,d;中的 c、d (d=c;)为什么不是指向通一个存储单元?
#8
守鹤2008-08-31 12:44
c 、d是用class声明的实例,类对象的赋值,相当于将实例c空间的地址传到D。

例:   C   5   ---->   D   5
           6               6
#9
zhuerhua2008-09-01 11:04
这是在作为参数传递时表现出来的,值类型参数传递的是他的拷贝,即系统会生成一个临时变量然后将值复制给该变量,再传给调用函数,如果是引用就不会生成临时变量直接传递参数本身.
#10
vfdff2008-09-02 17:23
回复 9# zhuerhua 的帖子
那我代码中
void fun1(struct value v)
{
    v.x = 17;
}

void fun2(class address v)
{
    v.x = 17;
}
怎么没有表现出差别 ??
#11
liaojuncong2008-09-04 20:39
值类型在被调用时在调用中不会改变原来的值。而引用则会,你可以根据这一点去检验一下
#12
vfdff2008-09-06 00:41
回复 11# liaojuncong 的帖子
我 使用了
    fun1(b);
    fun2(d);

    printf("a=%d,b=%d; c=%d,d=%d\n",a.x,b.x,c.x,d.x);
但是 d.x的值没有发生变化,这个不是说明这个 class 也是值类型吗 ??
#13
中学者2008-09-06 00:52
LZ这个看不出问题...两者都是用的位拷贝...你可以完全理解为struct..但是struct什么时候会被识别为class呢???  可以考虑考虑.
1