C++继承与派生

来源:百度知道 编辑:UC知道 时间:2024/05/21 18:28:17
各位大侠您们好,
小弟在下面的程序里有一些问题不懂,想了很久都搞不清,
想请教一下各位大侠
#include<iostream.h>
#include<math.h>

class T{
protected:
float a,b;
int n;
public:
T(float a,float b,int n)
{this->a;this->b=b;this->n=n;}
virtual float f(float x)=0; ///A/////////
float area(void);
void show(char *str)
{cout<<"函数f(x)="<<str<<"在["<<a<<','<<b
<<"]上的积分值="<<area()<<endl;
}
};

float T::area(void)
{float s=0.0f,x=a,h=(b-a)/n;
for(int i=0;i<n;i++)
{s+=f(x);x+=h;}
return s*h;
}

class Tf1:public T{
float f(float x){return x-sin(x);}
public:
Tf1(float a=0,float b=2,int n=100):T(a,b,n){} ////B//////
};

void main(void)
{T* p=new Tf1(0,3); ////////C/////////
p->show("x-sinx");
delete p;
}

我补充一下吧:
1.纯虚函数是作为面向对象程序设计的基础的.
比如:
void Fun(A *a)
{
a->.....//通过a调用虚函数
}
当传递不同的A的子类时,里面a->....调用的方法也不一样,这即为“多态”。

2.派生类构造前需要先构造父类,所以需要调用父类的构造函数。
且T(a,b,n)属于初始化列表.(即先于自己的构造函数体执行之前执行)

virtual float f(float x)=0; ///A///////// 这句表示函数f是一个纯虚函数,需要继承这个类的子类(Tf1)来实现它,这样这个类就是虚基类,就不能直接初始化对象,如果没有=0,则这个函数是一个普通虚函数,在这个类中可以有这个函数的实现,不过如果子类中重写了这个函数,调用子类对象的该方法时会调用子类重新定义的函数。

T(a,b,n){} 是调用基类的构造函数,并把a,b,n传给它。

Tf1(float a=0,float b=2,int n=100)这个构造函数中都指定了默认值,所以你输入几个参数都可以,没有输入的参数采用默认值。