Code Bye

刚学c++ 书本里有个代码不懂,希望能够指点

下面是代码
#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

引用:
Quote: 引用:

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)

意思是   执行st2=stock 这句时stockc被隐式转换为stock类了,而后又调用了构造函数2,最后把类stockc拷贝给stock吗?
(上面本人的问的问题有处错误,应该是stockc不是一个数组名,一个地址吗?)

隐式转换  时就是在调用构造函数,之后调用该类的 默认的  操作符=函数,不是拷贝


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明刚学c++ 书本里有个代码不懂,希望能够指点