您的位置:首页 > 编程语言 > C语言/C++

C++构造函数的继承

2015-09-09 14:52 309 查看
一、基类没有定义构造函数的情况

1、派生类也可以不定义构造函数,全部采用默认的构造函数,此时,派生类新增成员的初始化工作可以用其他公有函数来完成。

2、如果只有派生类定义构造函数,只需要构造派生类对象即可,对象的基类部分使用默认构造函数来自动创建

二、基类中存在构造函数

1、基类中存在不带参数的构造函数。如果基类定义了构造函数,而且该构造函数没有参数,那么它可以隐式的被继承,也就是说,派生类根本不需要构造函数。例子如下:

namespace Test1

{

public class BaseClass

{

public BaseClass()

{

Console.WriteLine("基类的构造函数被继承");

}

}

public class ChildClass : BaseClass

{

}

class Program

{

static void Main(string[] args)

{

ChildClass cc = new ChildClass();

}

}

}

运行结果:

基类的构造函数被继承

从运行结果看,派生类继承了基类的构造函数,此时派生类不需要包含构造函数

2、基类中存在带参数的构造函数。如果基类定义了带有参数的构造函数,则此构造函数必须被继承且在派生类中实现构造函数。同时提供一个将参数传递给基类构造函数的途径,以便在基类进行初始化时能获得必需的数据,在实现构造函数时使用base关键字,例子如下:

namespace Test1

{

public class BaseClass

{

public BaseClass(int x,int y)

{

int result = x + y;

Console.WriteLine("基类构造函数中的内容");

Console.WriteLine("x = {0},y = {1}两数和为", x, y, result);

Console.WriteLine();

}

}

public class ChildClass : BaseClass

{

public ChildClass(int x, int y):base(x,y)

{

Console.WriteLine("派生类构造函数中的内容");

int result = x * y;

Console.WriteLine("x = {0} y = {1}两数的积为:", x, y, result);

}

}

class Program

{

static void Main(string[] args)

{

ChildClass cc = new ChildClass(5,6);

}

}

}

运行结果:

基类构造函数中的内容

x = 5,y = 6两数和为

派生类构造函数中的内容

x = 5 y = 6两数的积为:

解析:派生类隐式的继承基类中不带参数的构造函数,上面的代码中基类定义了带有参数的构造函数,在其派生类中被继承,并使用base关键字传递参数。可以从运行结果中看到在创建派生类的对象后,程序首先运行的是基类的构造函中的内容,然后才是派生类的内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: