派生类成员函数体中调用基类构造函数的问题?

来源:百度知道 编辑:UC知道 时间:2024/09/22 12:52:45
这段代码为什么会说d被重定义?
#include<iostream>
using namespace std;

class Widget {
public:
Widget(int w = 0) {cout << w << endl; };
};

class Derive: public Widget
{
public:
void mem(int d) {Widget(d);};
};

void main()
{
Derive d;
d.mem(1);
}
谢谢!我学的时候只是听说基类构造函数不被继承,所以只是试下在派生类中能否调用基类构造函数。根本没想得这么深,竟引出这种看似用对象d调用了Widget拷贝构造函数初始化一个Widget临时对象的错误。

我想知道你在Derive::mem(int)函数中写上一句Widget(d)的用意是什么?用d来构造一个Widget的临时对象吗?错了,这样的写法看上去像是调用Widget的构造函数来构造一个临时对象,但实际上却跟Widget d;一样,就是定义一个Widget类的对象d而已,所以会提示你d被重定义。你应该写成Widget temp(d);