Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

初学C++,有Java背景。

今天学到复制函数这边,突发奇想,如果类A被作为类B的构造函数的参数传递进去,然后又通过初始化列表进行赋值,那么类 A 的复制构造函数会被调用几次?

我猜测可能会有两次,所以做个试验验证一下,但是语法检查无措,在执行时,却一大堆错误。

先上代码

class Clock {

public:

Clock(int h, int m, int s) :hour(h), minute(m), second(s) {}

Clock(Minu m) : minu(m) {}

private:

int hour, minute, second;

Minu minu;

};

class Minu {

public:

Minu(): minute(0) {} // 普通无参构造函数

Minu(const Minu& m) { // 复制构造函数

cout << "调用复制构造函数" << endl;

}

private:

int minute;

};

int main() {

Minu m;

Clock clockA(m);

return 0;

}

代码语法检查没有问题,但是一运行,报错一大堆。

image.png


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
421 views
Welcome To Ask or Share your Answers For Others

1 Answer

C++前置声明了解一下。就是先告诉你有这个类的存在,但是不告诉你实现,然后你就可以用指针去指向这个类了。(当然实现还是要的,可以在任何地方实现,不一定要强调位置)
由于Minu类在Clock类中它不认识,所以就给你报一堆语法错误。
解决方法有两种。一种楼上的已经提到了,把Minu放到Clock前面定义。第二种就是采用前置声明。
你要是有接触到友元函数,会发现前置声明的用法有很多。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...