描述构造函数如何在继承中使用

 我来答
手机用户30605
2011-09-24 · TA获得超过231个赞
知道答主
回答量:864
采纳率:33%
帮助的人:288万
展开全部
继承技术是面向对象编程的主要特征。面向对象编程语言引入继承机制,可以实现代码重用,提高编程效率。C#只支持单继承,即一个派生类只能有一个基类。

类的继承性是指一个类定义既可以具有其他类的数据成员、属性成员、方法成员等,也可以使其他类具有自己的数据成员、属性成员、方法成员等。在类的继承中,被继承的类叫基类或父类,继承的类叫派生类或子类。

派生类通常定义的语法格式为:

public class 派生类名称 : 基类名称

public:访问控制修饰符,访问控制修饰符可以是public、protected和private。通常都使用public以保证类的开放性,并且public可以省略,因为类定义的访问控制默认为是pulbic。

“:基类名称”:表示所继承的类。

在类的继承中,作为基类的数据成员通常使用protected修饰符,而不使用private修饰符。因为如果在基类中使用private修饰符声明数据成员,则其成员将不允许派生类成员访问,而protected修饰符,既能保证数据成员不被直接访问,又允许其派生类成员访问。

在创建派生类对象时,调用构造函数的顺序是先调用基类构造函数,再调用派生类的构造函数,以完成为数据成员分配内存空间并进行初始化的工作。

如果派生类的基类本身是另一个类的派生类,则构造函数的调用次序按由高到低顺序依次调用。例如,假设A类是B类的基类,B类是C类的基类,则创建C类对象时,调用构造函数的顺序为,先调用A类的构造函数,再调用B类的构造函数,最后调用C类的构造函数。

向基类构造函数传递参数,必须通过派生类的构造函数实现,其格式如下:

public 派生类构造函数名(形参列表):base(向基类构造函数传递的实参列表)

“base”是C#关键字,表示调用基类的有参构造函数。

传递给基类构造函数的“实参列表”通常包含在派生类构造函数的“形参列表”中。

密封类是不允许其他类继承的类。密封方法是不允许派生类重载的方法

定义密封类与密封方法需要使用sealed关键字,定义密封类的格式为:

访问修饰符 sealed class 类名称

定义密封方法的格式为:

访问修饰符 sealed 返回类型 方法名称(参数列表)

多态性就是指在程序运行时,执行的虽然是一个调用方法的语句,却可以根据派生类对象的类型不同完成方法的不同的具体实现。

在类的继承中,C#允许在基类与派生类中声明具有同名的方法,而且同名的方法可以有不同的代码,也就是说在基类与派生类的相同功能中可以有不同的具体实现,从而为解决同一问题提供多种途径。

要实现继承的多态性,在类定义方面,必须分别用virtual关键字与override关键字在基类与派生类中声明同名的方法,在具体实现上通常是通过传递对象的途径,并且通常基类有两个以上的派生类,或者基类的派生类其下又有派生类。

基类中的声明格式:

public virtual 返回类型 方法名称(参数列表)

派生类中的声明格式:

public override 返回类型 方法名称(参数列表)

其中,基类与派生类中的方法名称与参数列表必须完全一致。

在派生类中声明与基类同名的方法,也叫方法重载。在派生类重载基类方法后,如果想调用基类的同名方法,可以使用base关键字。在派生类定义中调用基类方法的格式为:

base 基类方法名称(参数列表);

抽象类是指基类的定义中声明不包含任何实现代码的方法,实际上就是一个不具有任何具体功能的方法。这样的方法唯一的作用就是让派生类重写。在基类定义中,只要类体中包含一个抽象方法,该类即为抽象类。在抽象类中也可以声明一般的虚方法。声明抽象类与抽象方法均需使用关键字abstract,抽象方法不是一般的空方法,抽象方法声明时,没有方法体。

抽象方法与虚方法的作用相同,两者均是实现多态的基础,因而两者均允许派生类重载。只不过对于基类中的抽象方法,在其派生类中要求必须重写,而虚方法则不要求一定重写。抽象方法一般应用于基类中的该方法不应有具体实现功能,而虚方法则应用于基类中的该方法应该有具体的实现功能。

在C#中,Array类是一个抽象类,该类提供创建、操作、搜索和排序数组的方法,因而在公共语言运行库中用作所有数组的基类。

在C#中,Math类是一个密封类,该类为三角函数、对数函数和其他通用数学函数提供常数和静态方法。Convert类也是一个密封类,该类将一个基本数据类型转换为另一个基本数据类型。
百度网友fa81615
2011-09-23 · TA获得超过126个赞
知道答主
回答量:39
采纳率:100%
帮助的人:23.6万
展开全部
类对象在初始化时,会先调用父类的构造函数,然后调用自己的构造函数;类对象在析构时,先调用自己的析构函数,再调用父类的析构函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
theperfact
2011-09-26 · 超过33用户采纳过TA的回答
知道答主
回答量:168
采纳率:0%
帮助的人:90.3万
展开全部
和楼主一样的问题求解。
mystring 如何使用基类的构造函数string ( const char * s );
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1561571554qq
2011-09-23
知道答主
回答量:9
采纳率:0%
帮助的人:1.5万
展开全部
ghcgjuugui
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式