构造函数的调用顺序
建立派生类对象时,构造函数的调用顺序为:基类的构造函数、成员对象的构造函数、派生类的构造函数.我不明白为什么派生类构造函数的调用在成员对象构造函数调用之后???、...
建立派生类对象时,构造函数的调用顺序为:基类的构造函数、成员对象的构造函数、派生类的构造函数. 我不明白为什么派生类构造函数的调用在成员对象构造函数调用之后???、
展开
展开全部
构造代码块的作用同样是给对象进行初始化。对象一建立就运行构造代码块了,而且优先于构造函数执行。这里要强调一下,有对象建立,才会运行构造代码块,类不能调用构造代码块的,而且构造代码块与构造函数的执行顺序是前者先于后者执行。
构造代码块与构造函数的区别是:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,因为构造函数是可以多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象,都会先执行相同的构造代码块。也就是说,构造代码块中定义的是不同对象共性的初始化内容。
扩展资料
1)使用new操作符创建对象。如果含有静态成员变量:
静态成员变量的静态代码块 -> 静态成员变量的代码块 -> 静态成员变量的构造方法) -> 静态代码块 -> 代码块 -> 构造函数
2)如果不含静态成员变量:
静态代码块 -> (静态成员变量的静态代码块 -> 静态成员变量的代码块 -> 静态成员变量的构造方法) -> 代码块 -> 构造函数。静态代码块只执行一次,而每次创建对象都会调用共同的构造代码块,而构造函数也只在创建对象时执行该对象的构造函数。
参考资料来源:百度百科-构造函数
展开全部
C++构造函数调用顺序
1、创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类);
2、如果类里面有成员类,成员类的构造函数优先被调用;
3、基类构造函数如果有多个基类则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序;
4、成员类对象构造函数如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序而不是它们出现在成员初始化表中的顺序;
5、派生类构造函数
作为一般规则派生类构造函数应该不能直接向一个基类数据成员赋值而是把值传递给适当的基类构造函数否则两个类的实现变成紧耦合的(tightly coupled)将更加难于正确地修改或扩展基类的实现。(基类设计者的责任是提供一组适当的基类构造函数)。
1、创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类);
2、如果类里面有成员类,成员类的构造函数优先被调用;
3、基类构造函数如果有多个基类则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序;
4、成员类对象构造函数如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序而不是它们出现在成员初始化表中的顺序;
5、派生类构造函数
作为一般规则派生类构造函数应该不能直接向一个基类数据成员赋值而是把值传递给适当的基类构造函数否则两个类的实现变成紧耦合的(tightly coupled)将更加难于正确地修改或扩展基类的实现。(基类设计者的责任是提供一组适当的基类构造函数)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单一点说。基类也叫父类。派生类 也叫子类。没有老子哪来的儿子????
这个应该是java问题把。。c++我没学过不知道就按java里说了
实际上是因为要创建子类的同时必须先创建父类
class a
{
a()
{
System out println("a");
}
}
class b extends a
{
b()
{
System out println(b);
}
public static void main(String args[])
{
b b1=new a();
}
编译这个程序的话会输出
a
b
你会发现a的构造方法被调用了 但是你并没有 new a();来创造一个a类的对象
实际上编译器会自动创意一个 a类的对象然后以这个对象为基础创建b的对象
}
这个应该是java问题把。。c++我没学过不知道就按java里说了
实际上是因为要创建子类的同时必须先创建父类
class a
{
a()
{
System out println("a");
}
}
class b extends a
{
b()
{
System out println(b);
}
public static void main(String args[])
{
b b1=new a();
}
编译这个程序的话会输出
a
b
你会发现a的构造方法被调用了 但是你并没有 new a();来创造一个a类的对象
实际上编译器会自动创意一个 a类的对象然后以这个对象为基础创建b的对象
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询