基类,派生类和类的对象成员的构造函数和析构函数的调用顺序是怎样的?----C++的思考题1

ltolll 2008-09-21 11:57:24
如题,是一个C++的思考题
...全文
592 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
herocm 2008-11-20
  • 打赏
  • 举报
回复
最先调用的是基类的类成员对象的构造函数
再基类的构造函数
再派生类的类成员对象的构造函数
再派生类的构造函数
WuBill 2008-09-23
  • 打赏
  • 举报
回复
这种问题,自己写个控制台程序,cout一下不就清楚了
光听别人说一遍,过两天还是忘了
luxiaoxun 2008-09-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wangdeqie 的回复:]
1.构造基类
2.构造子类
3.析构子类
4.析构基类
[/Quote]

析构函数顺序与构造函数调用顺序相反
机智的呆呆 2008-09-21
  • 打赏
  • 举报
回复
构造函数,始终是先父类再子类,在一个继承链中,先调用最终父类的构造方法,在调用派生类的,当所有父类的构造方法调用完了,才进行你要创建的对象的类的构造函数的调用,
析构函数顺序与构造函数调用顺序相反,如果运用多态的话要注意把虚函数声明为virtual
wangdeqie 2008-09-21
  • 打赏
  • 举报
回复
1.构造基类
2.构造子类
3.析构子类
4.析构基类
C++上机实验报告-实验五全文共7页,当前为第1页。C++上机实验报告-实验五全文共7页,当前为第1页。实验五 继承与派生 C++上机实验报告-实验五全文共7页,当前为第1页。 C++上机实验报告-实验五全文共7页,当前为第1页。 实验目的 1.学习定义和使用的继承关系,定义派生 2.熟悉不同继承方式下对成员的访问控制 3.学习利用虚解决二义性问题 实验要求 1.定义一个Animal,有私有整型成员变量age,构造其派生dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程尝试。 2.定义一个BaseClass,有整型变量Number,构造其派生DerivedClass,观察构造函数析构函数的执行情况。 3.定义一个车(vehicle),具有Maxspeed、Weight等成员,Run、Stop等成员函数,由此派生出自行车(bicycle)、汽车(motorcar)。自行车(bicycle)有高度(Height)等属性,汽车(motorcar)有座位数(SeatNun)等属性。从bicycle和motorcar派生出摩托车(motorbicycle),在继承过程中,注意把vehicle设置为虚。如果不把vehicle设置为虚,会有什么问题?编程尝试。 实验内容及实验步骤 1.编写程序定义Animal,成员变量age定义为私有的。构造派生dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现似以下的错误提示: error C2248 : 'age' : cannot access private member declared in class 'Animal' error C2248 : 'age' : cannot access private member declared in class 'Animal' 把age改为公有成员变量后重新编译就可以了。程序名:lab7_1.cpp。 2.编写程序定义一个BaseClass,构造其派生DerivedClass,在构造函数析构函数中用cout输出提示信息,观察构造函数析构函数的执行情况。程序名:lab7_2.cpp。 3.用debug功能跟踪程序lab7_2的执行过程,观察派生构造函数析构函数的执行情况。 4.编写程序定义一个车(vehicle),由此派生出自行车(bicycle)、汽车(motorcar),注意把vehicle派生为虚。再从bicycle和motorcar派生出摩托车(motorcycle),在main()函数中测试这个。程序名:lab7_3.cpp。 编译成功后,把vehicle设置为非虚,再编译一次,此时系统报错,无法编译成功。这是因为若不把vehicle设置为虚,会出现二义性错误,程序不能成功编译。 思考题 1.如何在已有的的基础上设计新的? 采用的派生的方法,利用派生出子,子继承的属性,从而在已有的基础上设计新的派生,模式如下: class 派生名:继承方式 名1,继承方式 名2,…,继承方式 名n { 派生成员声明; }; 2.派生对象的构造顺序是怎样的? 先调用构造函数,然后再调用内嵌对象派生中的对象)的构造函数构造函数调用顺序是按照派生定义时的顺序,而内嵌对象构造函数调用顺序是按照成员C++上机实验报告-实验五全文共7页,当前为第2页。C++上机实验报告-实验五全文共7页,当前为第2页。中声明的顺序C++上机实验报告-实验五全文共7页,当前为第2页。 C++上机实验报告-实验五全文共7页,当前为第2页。 3.如何利用虚解决二义性问题? 将共同设置为虚,语法为: class 派生名:virtual 继承方式 名 源程序 Lab7_1.cpp #include using namespace std; class Animal//Animal { /*private: int age;*/ public: int age; Animal(){} ~Animal(){} Animal(int ); }; class Dog:public Animal//Dog,Animal的公有派生 { private: int number; public: Dog(){} ~Dog(){} Dog(int,int); void setAge(int ); void showNumber(); void showAge(); }; Animal::A
C++上机实验报告-实验六全文共11页,当前为第1页。C++上机实验报告-实验六全文共11页,当前为第1页。实验六 多态性 C++上机实验报告-实验六全文共11页,当前为第1页。 C++上机实验报告-实验六全文共11页,当前为第1页。 实验目的 1.掌握运算符重载的方法 2.学习使用虚函数实现动态多态性 实验要求 1.定义Point,有坐标_x,_y两个成员变量;对Point重载"++"(自增)、"――"(自减)运算符,实现对坐标值的改变。 2.定义一个车(vehiele),有Run、Stop等成员函数,由此派生出自行车(bicycle)、汽车(motorcar),从bicycle和motorcar派生出摩托车(motorcycle),它们都有Run、Stop等成员函数。观察虚函数的作用。 3. (选做)对实验4中的People重载"=="运算符和"="运算符,"=="运算符判断两个people对象的id属性是否相等;"="运算符实现People对象的赋值操作。 实验内容及实验步骤 1.编写程序定义Point,在中定义整型的私有成员变量_x_y,定义成员函数Point& operator++();Point operator++(int);以实现对Point重载"++"(自增)运算符,定义成员函数Point& operator--();Point operator--(int);以实现对Point重载"--"(自减)运算符,实现对坐标值的改变。程序名:1ab8_1.cpp。 2.编写程序定义一个车(vehicle),有Run、Stop等成员函数,由此派生出自行车(bicycle)、汽车(motorcar),从bicycle和motorcar派生出摩托车(motorcycle),它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle型的指针来调用这几个对象成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。程序名:lab8_2.cpp。 思考题 如何将一个运算符重载为成员函数? 函数型 operator 运算符(形参表) { 函数体; } 如何将一个运算符重载为的友元函数? friend 函数型 operator 运算符(形参表) { 函数体; } 3.如何实现运行时刻的多态? 在成员函数前加上virtual,就可以在它的派生中声明相同名字和型的成员函数,在运行过程中,系统会自动判断并调用相应中的成员函数,从而在调用过程中实现多态。 源程序 lab8_1.cpp #include C++上机实验报告-实验六全文共11页,当前为第2页。C++上机实验报告-实验六全文共11页,当前为第2页。using namespace std; C++上机实验报告-实验六全文共11页,当前为第2页。 C++上机实验报告-实验六全文共11页,当前为第2页。 class Point { private: int _x; int _y; public: //构造.析构函数 Point(){} Point(int,int); ~Point(){} //++.--重载 Point& operator ++(); Point operator ++(int); Point& operator --(); Point operator --(int); //输出点坐标 void showPoint(); }; Point::Point(int x,int y) { _x=x; _y=y; } Point& Point::operator ++() { _x++; _y++; return *this; } Point Point::operator ++(int) { Point p=*this; ++(*this); return p; } Point& Point::operator --() { _x--; _y--; return *this; } Point Point::operator --(int) { C++上机实验报告-实验六全文共11页,当前为第3页。C++上机实验报告-实验六全文共11页,当前为第3页。 Point p=*this; C++上机实验报告-实验六全文共11页,当前为第3页。 C++上机实验报告-实验六全文共11页,当前为第3页。 --(*this); return p; } void Point::showPoint() { cout<<"The point is ("

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧