c++问题急

c++问题急,第1张

C++支持的两种多态性分别是___重载______多态性和_____虚函数____多态性。

C++中语句const char const p=〃hello〃;所定义的指针p和它所指的内容都不能被___修改______。

表达式cout<<end1还可表示为_______cout << “\n”__。

当一个成员函数被调用时,该成员函数的____this指针___指向调用它的对象。

定义类的动态对象数组时,系统只能够自动调用该类的____默认_____构造函数对其进行初始化。

构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,而析构函数名是在类名前加一个~、 析构函数__没有___(有/没有)参数 、 析构函数___可以__(可以/不可以)定义为虚函数 。

基类的公有成员在派生类中的访问权限由___访问标号______决定。

假定AB为一个类,则语句AB(AB&x);为该类____拷贝_____构造函数的原型说明。

将关键字const写在成员函数的_____参数表____和___函数体______之间时,所修饰的是this指针。

静态数据成员在类___外_(填“外或内”)进行初始化,且静态数据成员的一个拷贝被类的所有对象__共有__。

举出C++中两种代码复用的方式:_继承____、___模板__ 。

面向对象的程序设计有四大特征,它们是抽象、封装、___继承__ 、_多太____ 。

派生类从一个或多个以前定义的该类的____基类_____继承数据和函数。

函数重载和模板。就这题来说选A。

继承和虚函数对应的多态需要在运行的时候才能确定具体对象,所以不属于编译时多态。

函数重载是让一个函数名对应多个函数,编译器会根据调用时候的特征确定要调用的函数,不需要再运行时处理。

而模板是让一个一个类型模板或者函数模板对应多个类型或者函数,编译器根据对模板实例化是使用的参数生成具体的类和函数,也不是在运行时进行的。

另外注意模板变量不属于多态范畴。

接口的实现原理 应该说接口实现是没有什么原理的

你定义了一个接口 不去用他也是可以的 没有问题的

接口可以说是一个工具 或者说是一个规范

在写作文的时候 老师规定要列提纲 但是实际上作文是可以脱离

提纲而独立存在 但是有了提纲我们就能很快了解到作为的内容

接口一样的 一开始我们编程 可能都用不到接口 所以一直在迷惑

这接口到底有什么作用。

接口当然很有用

等到你做一个大的项目的时候 你就会发现 有一些实体 服务 他们都是差不多的

那就有必要事先把这些服务抽象出接口来

然后我们的编码就按照接口的规范来实现具体的功能。

以后要是数据库表结构发生了大变化 重构代码难度很大 需要这部分功能重新开放 那么这个接口 就可以复用 对这个接口 进行实现就可以了。

总结出来:接口是服务于我们的代码 让我们的代码更好理解 更有层次感

具体的系统功能 还是在我们的实现类底下的 service最终还是调用我们实现类的

以上原创 手打 没有用标点的习惯

具体的周长面积求解我就不写了,我写下派生类的层次和抽象时的思路吧

如果我来写,大体会是这样的

首先,抽象就是把这几个类的共同点和不同点比较一下,

比如:以点为基类,对于图形来说是有位置的,这个位置就用点来代替。

所以他们肯定有共同的位置,用什么表示呢,用坐标x,y

那就有

class Point

{

public:

Point(int x, int y):m_x(x),m_y(y){};

protect:

int m_x;

int m_y;

}

再看圆形,圆形的位置一般用圆心来表示,那么点的x,y正好代表这个圆心

,那圆形比点的表示多个半径,就叫m_radius吧,于是有

class Circle:public Point

{

public:

Circle(int x, int y, radius):Point(x, y)

{

m_raduis = raduis;

};

float calcArea()//圆形面积

{

return MathPI pow(m_raduis, 2);

}

float calcLength()//圆形周长

{

return MathPI 2 m_raduis;

}

protected:

int m_raduis;

}

对于矩形来说,有位置,又有长宽,有两种定义方法

以左上角表达位置,这么表达的话运算比较简单,但是其位置和圆形的位置就有冲突了,也就是说矩形的位置就不代表矩形的图心了。

以矩形的中心店表达矩形的位置,这个运算稍微复杂一点点,但是其位置

是图形的图心,考虑到时从Point继承过来的,那就用图心来代表位置吧

class Rectangle:public Point

{

public:

Rectangle(int width, int height, x, y): Point(x, y)

{

m_halfWidth = width / 2;

m_halfHeight = height/ 2;

}

int calcArea()

{

return 2m_halfWidth m_halfHeight2;

}

int calcLength()

{

return (m_halfWidth + halfHeight)4;

}

protected:

int m_halfWidth;

int m_halfHeight;

}

补充说几点:

不同的人抽象出来的东西的类和表达方式可能不一样,上面的方式可能是我这个笨蛋作出的一个牵强附会的答案。

聪明人可能会看出这个题目的问题,Point最好的方式不是用作基类,因为在抽象的时候你会发现,这个Point最好的方式可能是单独做为表达位置的类比较合适。

比如有类Point如上

那Circle类可能就直接是一个Point变量代表圆心,一个半径代表半径,即可表达一个圆形

那Rectangle类可以以4个Point点来刻画一个矩形,但是这样做内存代价比较大,也可以使用上面的方式

可以看到Rectangle类,为了具象描述位置和长宽,在构造函数中采用了长宽而非半长半宽的方式,这样的代价就是计算周长和面积的时候多了一次乘法运算。

可以,举个例子Item_base是

基类

,

虚函数

叫net_price

Item_base

baseP=&derived;

double

d=baseP->Item_base::net_price(42);

楼主的问题我在VC上调试了一下,在虚函数声明时可以加上const,定义时也必须同时加上。加在函数名前表示限定函数返回值,在函数名后表示限定函数为常函数。不过这两项都没什么意义,只不过使定义更加清晰。

如果楼主想学C++的话,就要在电脑上安装一个vc,我装的是VC++60。遇到不懂的,在VC上调试一下不就明白了,技术这东西,看再多书都是纸上谈兵。只有自己亲自实践了,才能明白其中奥妙,当然也不是说看书没用,一些原理运作还是要懂的。

在编程语言和类型论中,多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口。 多态类型(英语:polymorphic type)可以将自身所支持的 *** 作套用到其它类型的值上。

计算机程序运行时,相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作。

多态也可定义为“一种将不同的特殊行为和单个泛化记号相关联的能力”。

扩展资料:

多态可分为变量多态与函数多态。变量多态是指:基类型的变量(对于C++是引用或指针)可以被赋值基类型对象,也可以被赋值派生类型的对象。函数多态是指,相同的函数调用界面(函数名与实参表),传送给一个对象变量,可以有不同的行为,这视该对象变量所指向的对象类型而定。因此,变量多态是函数多态的基础。

多态还可分为:动态多态(dynamic polymorphism)和静态多态(static polymorphism)。

对于C++语言,带变量的宏和函数重载(function overload)机制也允许将不同的特殊行为和单个泛化记号相关联。然而,习惯上并不将这种函数多态(function polymorphism)、宏多态(macro polymorphism)展现出来的行为称为多态(或静态多态),否则就连C语言也具有宏多态了。谈及多态时,默认就是指动态多态,而静态多态则是指基于模板的多态。

c++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。因此,在子类重新声明该虚函数时,可以加,也可以不加,但习惯上每一层声明函数时都加virtual,使程序更加清晰。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11670414.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存