为什么此处C0 obj=3;是对的
来源:百度知道 编辑:UC知道 时间:2024/05/25 14:57:44
#include<iostream.h>
class C0
{
/********found********/
int m,n
/********found********/
public
/********found********/
C0(int p,int q)
{
m =p;
n =q;
}
void print()
{
cout<<"m="<<m<<" n="<<n;
cout<<endl;
}
};
void main()
{
C0 obj=3;
obj.print();
}
为什么此处C0 obj=3;是对的
而这个程序:
#include<iostream.h>
class C0
{
/********found********/
int const n, m;
public:
explicit C0(int t)
/********found********/
: n=t
{
m =0;
}
void Set(int y)
{
m = y;
}
void print()
{
cout<<"m="<<m<<" n="<<n;
cout<<endl;
}
};
void main()
{
/********found********/
C0 obj=3;
obj.Set(2);
obj.print();
class C0
{
/********found********/
int m,n
/********found********/
public
/********found********/
C0(int p,int q)
{
m =p;
n =q;
}
void print()
{
cout<<"m="<<m<<" n="<<n;
cout<<endl;
}
};
void main()
{
C0 obj=3;
obj.print();
}
为什么此处C0 obj=3;是对的
而这个程序:
#include<iostream.h>
class C0
{
/********found********/
int const n, m;
public:
explicit C0(int t)
/********found********/
: n=t
{
m =0;
}
void Set(int y)
{
m = y;
}
void print()
{
cout<<"m="<<m<<" n="<<n;
cout<<endl;
}
};
void main()
{
/********found********/
C0 obj=3;
obj.Set(2);
obj.print();
貌似你的C0 obj=3并不成立,也就是说,即使C0定义成你上面的那个C0的模样,C0 obj=3;也不会编译通过。这样的赋值方法要求一个类型转换构造函数,也就是要求一个C0(int a);这样的函数构造,而你贴出的代码并没有提供这样的构造函数,所以这两个C0的定义都不会使C0 obj=3;编译通过的。
如果C0的类写成这样:
class C0
{
/********found********/
int m,n
/********found********/
public
/********found********/
C0(int p,int q=0)
{
m =p;
n =q;
}
void print()
{
cout<<"m="<<m<<" n="<<n;
cout<<endl;
}
};
倒可以编译通过。
当编译器遇到形如C0 obj = 3;这样的语句时,会发生一个隐式的类型转换,这个类型转换的前提条件就是,需要一个可以提供转换的构造函数,就像
C0::C0(int p,int q=0)
{
m =p;
n =q;
}
或
C0::C0(int p)
{
}
这样一来,遇到C0 obj=3时,编译器就会翻译成下面这样:
C0 obj = C0(3);
有时为了防止这样的类型转换,就要在构造函数前加上一个关键字:explicit,这个关键字就可以防止编译器来进行隐式的类型转换了。所以你贴出的代码的第二个C0的类定义不会使C0 obj=3;这样的语句编译通过,因为它的构造函数前加上了explicit关键字。
请问光影魔术手的注册码是多少啊,我的机器码是#>5J085E>::595?E9<9C0=3<2#CN
一个cpp生成一个obj么?汇编代码的生成是在生成obj之前么?
c++primer 3中,int obj; void frd(double &),为什么不能这样调用呢?frd(obj);
此句为什么是对的?同化作用,异化作用
为什么我将3DMAX的模型导出为OBJ再导入MAYA里不能正确显示?
js问题.简单的.var obj = oItem.children(nIndex);
java里的equals(Objcet obj)方法不是可以比较两个对象里的内容吗?为什么这样会是false?
OBJ格式的模型导入MAYA后怎么对它编辑?
obj = new Object([value])
c0 与co2的不同性质