下面是代码
#include<iostream>
#include<string>
using namespace std;
const int size=80;
class stock
{
public:
stock()
{
strcpy(stockcode,” “);
cout<<“调用构造函数1″<<endl;
}
stock(char code[],int q=100,double p=8.98)
{
strcpy(stockcode,code);
quantity=q;
price=p;
cout<<“调用构造函数2″<<endl;
}
void print(void)
{
cout<<this->stockcode;
cout<<” “<<this->quantity<<” “<<this->price<<endl;
}
private:
char stockcode[size];
int quantity;
double price;
};
int main()
{
stock st1(“600001″,3000,8.98);
st1.print();
stock st2;
char stockc[]=”600002”;
st2=stockc;
st2.print();
return 0;
}
st2=stockc; 不清楚为什么能这样赋值,stock不是一个数组名,一个地址吗?为什么能赋给一个类?还有就是运行结果:第一次输出后,构造函数被调用了两次,不是只定义了st2吗? 小弟第一次问问题,运行图片不知为何上传不了。本人是在vc++6.0下编译的。 希望懂的人能帮忙解答,感激不尽。
#include<iostream>
#include<string>
using namespace std;
const int size=80;
class stock
{
public:
stock()
{
strcpy(stockcode,” “);
cout<<“调用构造函数1″<<endl;
}
stock(char code[],int q=100,double p=8.98)
{
strcpy(stockcode,code);
quantity=q;
price=p;
cout<<“调用构造函数2″<<endl;
}
void print(void)
{
cout<<this->stockcode;
cout<<” “<<this->quantity<<” “<<this->price<<endl;
}
private:
char stockcode[size];
int quantity;
double price;
};
int main()
{
stock st1(“600001″,3000,8.98);
st1.print();
stock st2;
char stockc[]=”600002”;
st2=stockc;
st2.print();
return 0;
}
st2=stockc; 不清楚为什么能这样赋值,stock不是一个数组名,一个地址吗?为什么能赋给一个类?还有就是运行结果:第一次输出后,构造函数被调用了两次,不是只定义了st2吗? 小弟第一次问问题,运行图片不知为何上传不了。本人是在vc++6.0下编译的。 希望懂的人能帮忙解答,感激不尽。
解决方案
10
st2=stockc; 执行的是“调用构造函数2”,匹配的是参数 char[],另两个参数使用了默认值。
输出应该是这样子的
输出应该是这样子的
调用构造函数2 --> 对应 stock st1("600001",3000,8.98); 600001 3000 8.98 调用构造函数1 --> 对应 stock st2; 调用构造函数2 --> st2=stockc; 600002 100 8.98
可以给“构造函数2”,增加一个explicit说明符,就会防止st2=stockc语句,使st2=stockc无法编译通过。
explicit stock(char code[],int q=100,double p=8.98)
10
隐式转换 时就是在调用构造函数,之后调用该类的 默认的 操作符=函数,不是拷贝