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关键字传递参数。可以从运行结果中看到在创建派生类的对象后,程序首先运行的是基类的构造函中的内容,然后才是派生类的内容。
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关键字传递参数。可以从运行结果中看到在创建派生类的对象后,程序首先运行的是基类的构造函中的内容,然后才是派生类的内容。
相关文章推荐
- 深入浅出UML类图二
- C++类
- 计算一个整数有多少个1的函数
- Java 的 interface、abstract class 与 C++ 的多继承、虚基类
- c++ 副本构造器
- 深入浅出UML类图一
- C++——运算符重载(三)
- C++中智能指针的设计和使用
- [iOS开发]C语言-04-程序循环结构(while{})视频解说
- C++中头文件(.h)和源文件(.cpp)都应该写些什么
- [iOS开发]C语言-03-程序分支结构(switch)视频解说
- 学习C++后感
- C++默认参数详细解析
- C/C++中算法运行时间的三种计算方式
- C++用法的学习心得
- 分享下c++字符转换str转wchar_t *或者说是(LPCWSTR)
- c#调用C++DLL参数对应
- C++习题一第八题
- C#调用C++编写的DLL函数各种参数传递问题
- c++用法的学习心得