首页 > 编程语言 >C++看程序写结果:调用一次Line类构造函数,执行几次Point类复制构造函数?

C++看程序写结果:调用一次Line类构造函数,执行几次Point类复制构造函数?

时间:2024-03-18 21:11:53浏览次数:22  
标签:Point C++ Calling constructor Pointx Line 构造函数

C++看程序写结果:调用一次Line类构造函数,执行几次Point类复制构造函数?

#include <iostream>
#include <cmath>
using namespace std;

class Point { //Point类定义
public:
    Point(int xx = 0, int yy = 0) {
        x = xx;
        y = yy;
    }
    Point(Point &p);
    int getX() { return x; }
    int getY() { return y; }
private:
    int x, y;
};

Point::Point(Point &p) { //复制构造函数的实现
    x = p.x;
    y = p.y;
    cout << "Calling the copy constructor of Point" << "x=" << x<< ",y=" <<y <<endl;
}

//类的组合
class Line { //Line类的定义
public: //外部接口
    Line(Point xp1, Point xp2, Point xp3);
    Line(Line &l);
    double getLen() { return len; }
private: //私有数据成员
    Point p2, p1,p3; //Point类的对象p1,p2
    double len;
};

//组合类的构造函数
Line::Line(Point xp1, Point xp2,Point xp3) : p1(xp1), p2(xp2), p3(xp3) {
    cout << "Calling constructor of Line" << endl;
    double x = static_cast<double>(p1.getX() - p2.getX());
    double y = static_cast<double>(p1.getY() - p2.getY());
    len = sqrt(x * x + y * y);
}

Line::Line (Line &l): p1(l.p1), p2(l.p2) , p3(l.p3) {//组合类的复制构造函数
    cout << "Calling the copy constructor of Line" << endl;
    len = l.len;
}

//主函数
int main() {
    Point myp1(1, 2), myp2(3, 4),myp3(5,6); //建立Point类的对象
    Line line(myp1, myp2,myp3); //建立Line类的对象
    return 0;
}

一共执行6次point类复制构造函数。前三次是把point类的值传入line类构造函数,后三次是根据line类声明的先后顺序,通过初始化列表执行point类复制构造函数。

特别反直觉的是,虽然是 line(myp1,myp2,myp3) ,但是最先执行复制构造函数的是myp3,传值进去的构造顺序是反过来的。

Calling the copy constructor of Pointx=5,y=6
Calling the copy constructor of Pointx=3,y=4
Calling the copy constructor of Pointx=1,y=2
Calling the copy constructor of Pointx=3,y=4
Calling the copy constructor of Pointx=1,y=2
Calling the copy constructor of Pointx=5,y=6
Calling constructor of Line

 

标签:Point,C++,Calling,constructor,Pointx,Line,构造函数
From: https://www.cnblogs.com/uacs2024/p/18081434

相关文章

  • 【CSP考点回顾】C++标准库加速输入输出
    C++标准库加速输入输出ios_base::sync_with_stdio(false);:取消C++标准库(iostream)与C标准库(stdio)之间的同步。默认情况下,为了保证C++的cin、cout与C的stdin、stdout能够互相交换数据,它们之间会进行同步。这样做虽然安全,但会减慢IO操作的速度,因为每次IO操作都需要进行同步。......
  • C++演奏起风了
    代码如下:#include<iostream>#include<Windows.h>//pragma预处理指令的作用是设定编译器的状态或者指示编译器完成一些特定的动作,//表示链接winmm.lib这个库,winmm.lib(多媒体)#pragmacomment(lib,"winmm.lib")usingnamespacestd;//Scale音阶enumScale{ Rest=......
  • 【c++初阶】C++入门(上)
    ✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨......
  • [4] C++高级编程
    Day1常量补充//--Day1.cpp#pragmaregion常量补充//常对象和常函数constStudentS1{10010,"张三",1500};S1.GetID();S1.SetID(10015);//调用非常函数会报错#pragmaendregion//--Student.h#pragmaonce#include<iostream>classStude......
  • Ubuntu 18.04.06 PCL C++学习记录(四)知识点补充
    @[TOC]PCL中K-Dtree模块的学习学习背景参考书籍:《点云库PCL从入门到精通》以及官方代码PCL官方代码链接学习内容PCL库中的智能指针和回调函数智能指针pcl::PointCloud<pcl::PointXYZRGBA>::PtrCloudOut(newpcl::PointCloud<pcl::PointXYZRGBA>());//存储输出点云......
  • 845. 八数码(C++)
    在一个 3×3的网格中,1∼8这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3的网格中。例如:123x46758在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):12345678......
  • C++实名认证接口教程-好集成的身份证实名认证接口-三要素认证
    现如今,随着实名制的实施,各行各业都将进行人员身份的核查,如家政、保洁、物流、金融、电商等,身份证实名认证接口主要是验证个人用户提交的姓名、人像和身份证号码信息,和公安数据库内对应的数据是否匹配一致,可以验证个人身份证信息的真伪。以下是C++语言调用翔云身份证实名......
  • 【STL】 C++常用容器介绍系列(一)----(map、set、stack)
    目录一、map系列1、map介绍2、unordered_map介绍3、map和unordered_map的选择二、set系列1、set介绍2、unordered_set介绍3、set和unordered_set的选择三、如何遍历和查询map和set1、map的遍历2、map的查询3、set的遍历4、set的查询四、stack介绍和操作stack的方......
  • C++实名认证接口教程-好集成的身份证实名认证接口-三要素认证
    现如今,随着实名制的实施,各行各业都将进行人员身份的核查,如家政、保洁、物流、金融、电商等,身份证实名认证接口主要是验证个人用户提交的姓名、人像和身份证号码信息,和公安数据库内对应的数据是否匹配一致,可以验证个人身份证信息的真伪。以下是C++语言调用翔云身份证实名认......
  • 初见Cpp(C++)
        从本篇开始,往后将开始更新C++有关的文章,本篇作为对C++的一个铺垫。将会较为详细的讲解一些有关C++的基本知识,便于读者从C语言阶段晋升到C++阶段。以下是对C++的一些介绍:    C++是在C的基础上,容纳进去了面对对象的编程思想,并且增加了许多有用的库,以及编程......