c++组合类构造函数顺序

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

class Point{
    private:
        int x, y;

    public:
        Point(int a = 0, int b = 0)
        {
            x = a; y = b;
            cout << "Point construction: " << x << ", "<< y << endl;
        }
        Point(Point &p) // copy constructor,其实数据成员是int类型,默认也是一样的
        {
            x = p.x;
            y = p.y;
            cout << "Point copy construction: " << x << ", "<< y << endl;
        }
        int getX()
        {
            return x;
        }
        int getY()
        {
            return y;
        }
}; 

class Line{
    private:
        Point start, end;

    public:
        Line(Point pstart, Point pend)
                    :start(pstart), end(pend) // 组合类的构造函数对内前对象成员的初始化必须采用初始化列表形式
        {
            cout << "Line constructior " << endl;
        }
        float getDistance()
        {
            double x = double(end.getX()-start.getX());
            double y = double(end.getY()-start.getY());
            return (float)(sqrt)(x*x+y*y);
        }
};

int main()
{
    Point p1(10,20),p2(100,200);
    Line line(p1,p2);
    cout << "The distance is: "<<line.getDistance()<<endl; return 0;
}

输出结果:

Point construction: 10, 20
Point construction: 100, 200
Point copy construction: 100, 200
Point copy construction: 10, 20
Point copy construction: 10, 20
Point copy construction: 100, 200
Line constructior
The distance is: 201.246

Line line(p1,p2);这一行代码在vs下面直接跳到point的复制构造函数,然后才进入line的构造函数的初始化列表,并再次进入point的复制构造函数

原文地址:https://www.cnblogs.com/working-in-heart/p/12089233.html

时间: 2024-08-30 01:46:42

c++组合类构造函数顺序的相关文章

组合类、派生类 拷贝构造函数

在派生类中如何写拷贝构造函数 一种形式:派生类拷贝构造函数名(对象p的引用):基类构造函数名(参数列表) 如:student::student(student&p):stud(p.num,p.name,p.sex) //注意,参数形式,是对象的引用,我们知道引用是C++特有的,这又是一个引用的用法 呵呵 一种形式:派生类拷贝构造函数名(对象p的引用):基类拷贝构造函数名(p) 如:student::student(student &p):stud( p) 注意:在调用基类的构造函数时或拷贝

阿里笔试题-派生类构造函数 创建顺序

派生类 与基类的关系: (1)创建构造函数的顺序 :基类构造函数(注意此处基类的成员不能初始化) ==>派生类成员初始化 ==>派生类构造函数 (2)派生类的构造函数 中 基类的构造函数默认在第一条,如果不写super(),则默认在第一条,注意位置不能颠倒 (3)派生类可以继承全部的基类的构造函数 阿里笔试题 举个栗子: 1 package com.test; 2 3 public class DispatchTest { 4 5 public static void main(String[

静态代码块、构造代码块、构造函数以及Java类初始化顺序

静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public HelloA(){//构造函数 } 关于构造函数,以下几点要注意:1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的.2.构造函数的作用是用于给对象进行初始化.3.一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次. 构造代码块 {//构造代码块 }

虚基类构造函数执行顺序

#include <iostream> using namespace std; class stream { public: stream(){cout<<"stream constructer"<<endl; ~stream(){cout<<"stream destructer"<<endl; }; class iistream : virtual stream { public: iistream()

组合类详解

组合类: 组合类的概念就是:指在一个类的数据成员中含有一个或多个类的对象,拥有这样结构的类就叫组合类.这种以数据成员身份出现的类对象就叫子对象. 继承和组合都可以实现一个类重用另一个类的行为功能,那么如何选择用组合类还是用继承? 当B与A属于同一类的范畴,并且B"is a kind of"A,一般应该把B设计为"继承"A:而如果B与A不属于同一类范畴,但是B"is a part of"A,并且A需要使用B的功能,这种情况应该设计为由B"

Android(java)学习笔记136:Java类初始化顺序

Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论: 1 .继承体系的所有静态成员初始化(先父类,后子类) 2 .父类初始化完成(普通成员的初始化-->构造函数的调用) 3 .子类初始化(普通成员-->构造函数) Java初始化顺序如图: 代码演示: class Sample { Sample(String s) { System.out.println(s); } Sample() { Sy

C++ 初始化形式、变量初始化规则、类构造函数的初始化列表

类构造函数的初始化列表,举例 一个对象的构造分两部分,首先是分配空间,然后初始化. 只要有对象生成,不管是以什么形式生成,都会调用构造函数进行初始化. 然后下面有个例子,在蓝色区域Big类的复制构造函数中,使用初始化列表进行成员的初始化(方法1)没有问题,而如果不使用初始化列表.直接在函数里用里面注释掉的代码(方法2)则会报错:Base类没有合适的构造函数. // W3-课程作业2-4.cpp : Defines the entry point for the console applicati

转!!关于java类初始化顺序

原文地址:http://www.cnblogs.com/luckygxf/p/4796955.html 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量->子类静态变量初始化块->父类变量初始化->父类变量初始化块->父类构造方法->子类变量初始化->子类变量初始化块->子类构造方法 --------------------------

WorldWind源码剖析系列:BMNG类构造函数深入分析

BMNG构造函数深入分析 一.主要类图 二.主要功能: 1)        BMNG类 BMNG类将包含以“Blue Marble”为主题的所有可渲染影像的根节点添加到当前星球的可渲染对象列表中,包括“ \Data\Earth\BmngBathy\”目录下的随源代码发布的12幅图像.从NASA服务器上下载的经过分层分级过的瓦片影像.根节点m_RenderableList主要用来存放下面三个RenderableObjectList类型对象:m_BlueMarbleList.m_ShadedList