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

包含中的赋值

xinshou1991 发布于 2011-08-03 16:33, 386 次点击
class A
{
public:
    A(){x=0;}
    A(int i){x=i;}
    void get(){cout<<x;}
private:
    int x;
};
class B
{
public:
    B(){y=0;}
    B(int i,int j,int k):a(i),b(j){y=k;}
    A geta(){return a;}
    A getb(){return b;}
    int gety(){return y;}
private:
    A a;
    A b;
    int y;
};
void main()
{
    B b(1,2,3);
    b.geta().get();
    b.getb().get();
    b.gety();
    cout<<b.gety();
}
其中x,y的值在构造函数中为什么要设置为0呢,开始我什么也没写一样运行出来了,赋为0和不赋为0 有什么区别吗?请各位高手请教?
5 回复
#2
ToBeStronger2011-08-03 20:53
本来就没有区别.....设置为0,是为了提供一个默认值.....
#3
xg56992011-08-03 21:14
x,y的值在构造函数中为什么要设置为0呢?
在你的程序中是没有任何影响,设置为0是创建一个对象初始化x和y的值,如果不初始化,那么假如
要进行if等语句进行判断时,比如if(x>5);就会出现错误;
因为没有初始化x,x的并不是数字,你可以自己写个代码int x; cout<<x<<endl;就知道为什么了
你的程序中x和y设置的0是在默认构造函数中设置而不是构造函数.
当你新建一个无参对象时 比如 A a;
就会自动调用默认构造函数.假设定义了A a(1)
则会调用带参的构造函数,一般当你创建了一个类系统会自动给你的类提供默认构造函数
但只要你创建了一个构造函数,系统就不会提供默认构造函数了!
#4
我是菜鸟C2011-08-03 21:35
   就算你不赋值的话,你的编译器会自己给他赋个初值的。。所以  效果一样。
#5
lucky5635912011-08-04 07:23
提供一个初值而已,无甚用处
#6
xinshou19912011-08-04 09:42
明白了!多谢各位啦!
1