社区
C++ 语言
帖子详情
基类,派生类和类的对象成员的构造函数和析构函数的调用顺序是怎样的?----C++的思考题1
ltolll
2008-09-21 11:57:24
如题,是一个C++的思考题
...全文
592
5
打赏
收藏
基类,派生类和类的对象成员的构造函数和析构函数的调用顺序是怎样的?----C++的思考题1
如题,是一个C++的思考题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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++
上机实验报告-实验五.docx
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++
实验报告实验八 派生与继承
C++
高级程序设计实验实验八-派生与继承 实验目的: 1.理解多重派生的定义; 2.理解多重派生中
构造函数
与
析构函数
的
调用
顺序
; 3.理解多重派生中虚拟
基
类
的作用; 实验内容: 1.理解下面的程序,并在VS下运行查看结果,回答程序后面的问题。 问题一:改正以上程序中存在的错误,并分析该程序的输出结果。 2.理解下面的程序,并在VS下运行查看结果,回答程序后面的问题。 问题一:在不改变原有程序意图的前提下,分别用三种方法改正以上程序,并使程序正确输出 程序设计题: 1.建立普通的
基
类
building,用来存储一座楼房的层数、房间数以及它的总平方数。建立
派生
类
house,继承building,并存储卧室与浴室的数量,另外,建立
派生
类
office,继承building,并存储灭火器与电话的数目。设计一主函数来测试以上
类
的用法。 代码: #include
c++.h> using namespace std; typedef long
思考题
: 1.按照下图的
类
层次结构编写程序,定义属于score的对c1以及
类
teacher的
对象
t1,分别输入个数据
成员
的值后再显示出这些数据。
C++
上机实验报告-实验六.docx
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 ("
【
C++
】
类
构造函数
、
析构函数
的
调用
顺序
「完整版」
一、全局变量、静态变量和局部变量 全局变量在程序开始时
调用
构造函数
、在程序结束时
调用
析构函数
。 静态变量在所在函数第一次被
调用
时
调用
构造函数
、在程序结束时
调用
析构函数
,只
调用
一次。 局部变量在所在的代码段被执行时
调用
构造函数
,在离开其所在作用域(大括号括起来的区域)时
调用
析构函数
。可以
调用
任意多次。 下面我们通过代码进行更详细的讲解: #include <iostream> using namespace std; // 下面定义三个
类
,在
调用
构造、
析构函数
时进行输出 class A {
php
派生
类
构造,
C++
派生
类
的
构造函数
和
析构函数
派生
类
对象
中包含
基
类
对象
,因此
派生
类
对象
在创建时,除了要
调用
自身的
构造函数
进行初始化外,还要
调用
基
类
的
构造函数
初始化其包含的
基
类
对象
。因此,程序中任何能够生成
派生
类
对象
的语句,都要说明其包含的
基
类
对象
是如何初始化的。如果对此不做说明,则编译器认为
基
类
对象
要用无参
构造函数
初始化——如果
基
类
没有无参
构造函数
,则会导致编译错误。在执行一个
派生
类
的
构造函数
之前,总是先执行
基
类
的
构造函数
。和封闭
类
说明
成员
对...
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章