紫辉星河 2017-05-18 06:46 采纳率: 100%
浏览 781
已采纳

学习C++拷贝构造函数时遇到的疑惑

代码如下:
#include
using namespace std;

class Clock
{
public:
Clock(int newH,int newM,int newS);
Clock();
Clock(Clock &pClk);
void SetTime(int newH=0,int newM=0,int newS=0);
void ShowTime();

private:
    int hour;
    int min;
    int sec;

};

Clock::Clock(int newH,int newM,int newS)
{
hour = newH;
min = newM;
sec = newS;
}

Clock::Clock()
{
hour = 0;
min = 0;
sec = 0;
}

Clock::Clock(Clock &pClk)
{
hour = pClk.hour;
min = pClk.min;
sec = pClk.sec;
}

void Clock::SetTime(int newH, int newM, int newS)
{
hour = newH;
min = newM;
sec = newS;
}

void Clock::ShowTime()
{
cout << "now the time is :\n" << hour << ":" << min << ":" << sec << endl;
}

Clock func()
{
Clock clk(11,30,0);
return clk;
}

int main(void)
{
Clock clk1(10,30,0);
clk1.ShowTime();

cout << "----拷贝构造函数测试----" << endl;
Clock clk2 = func();//该语句编译不通过
//Clock clk2;
//clk2 = func();
clk2.ShowTime();

return 0;

}

用Clock clk2;clk2 = func();没问题,但合并为Clock clk2 = func();就编译不通过,在这里把类Clock简单理解为某个数据类型如int怎么行不通呢?望有大神解惑!

  • 写回答

5条回答 默认 最新

  • 关注

    copy构造是 const Clock &

    Clock clk2 = func();//这是构造clk2对象

    Clock clk2;
    clk2= func();//这是调用了operator=,默认的operator=是按位拷贝

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥70 刚刚看到一个人的网站居然是通过cname访问的
  • ¥15 Attributeerror:super object has no attribute '__sklearn_tags__'_'
  • ¥15 逆置单链表输出不完整
  • ¥15 宇视vms-B200-A16@R启动不了,如下图所示,在软件工具搜不到,如何解决?(操作系统-linux)
  • ¥500 寻找一名电子工程师完成pcb主板设计(拒绝AI生成式答案)
  • ¥15 关于#mysql#的问题:UNION ALL(相关搜索:sql语句)
  • ¥15 matlab二位可视化能否针对不同数值范围分开分级?
  • ¥15 已经创建了模拟器但是不能用来运行app 怎么办😭自己搞两天了
  • ¥15 关于#极限编程#的问题,请各位专家解答!
  • ¥20 win11账户锁定时间设为0无法登录