c++課程實驗報告五原始碼
阿新 • • 發佈:2019-02-01
5.1
5.5
5.2#include <iostream> #include <complex> using namespace std; class Base { public: Base() {cout<<"Base-ctor"<<endl;} ~Base() {cout<<"Base-dtor"<<endl;} virtual void f(int){cout<<"Base::f(int)"<<endl;} virtual void f(double){cout<<"Base::f(double)"<<endl;} virtual void g(int i=10){cout<<"Base::g()"<<i<<endl;} }; class Derived : public Base { public: Derived() {cout<<"Derived-ctor" <<endl;} ~Derived(){cout<<"Derived-dtor"<<endl;} void f(complex<double>) { cout<<"Derived::f(complex)"<<endl; } void g(int i=20){ cout<<"Derived::g()"<<i<<endl; } }; int main() { cout<<sizeof(Base)<<endl; cout<<sizeof(Derived)<<endl; Base b; Derived d; Base *pb=new Derived; b.f(1.0); d.f(1.0); pb->f(1.0); b.g(); d.g(); pb->g(); delete pb; return 0; }
5.3#include <iostream> using namespace std; class Base { public: Base():data(count) { cout<<"Base-ctor"<<endl; ++count; } ~Base() { cout<<"Base-dtor"<<endl; --count; } static int count; int data; }; int Base::count; class Derived : public Base { public: Derived():data(count),data1(data) { cout<<"Derived-ctor"<<endl; ++count; } ~Derived() { cout<<"Derived-dtor"<<endl; --count; } static int count; int data1; int data; }; int Derived::count=10; int main() { cout<<sizeof(Base)<<endl; cout<<sizeof(Derived)<<endl; Base* pb = new Derived[3]; cout<<pb[2].data<<endl; cout<<((static_cast<Derived*>(pb))+2)->data1<<endl; delete[] pb; cout<<Base::count<<endl; cout<<Derived::count<<endl; return 0; }
5.4#include <iostream> #include <new> #include <assert.h> using namespace std; class Abstract { public: Abstract() { cout << "in Abstract()"<<endl; } virtual void f() = 0; }; class Subclass:public Abstract{ public: Subclass(){ cout<<"in Subclass()"<<endl; } void f(){ cout<<"Subclass::f()"<<endl; } }; int main() { Abstract *p = new Subclass; p->f(); delete p; return 0; }
#include<iostream>
#include<cmath>
#define PI 3.14
using namespace std;
class shape
{
public:
virtual float area()=0;
};
class triangle:public shape{
public:
triangle(float A,float B,float C){
a=A;
b=B;
c=C;
}
float area(){
p=(a+b+c)/2.0;
s=sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
private:
float a,b,c,p,s;
};
class circles:public shape{
public:
circles(float R){
r=R;
}
float area(){
s=PI*r*r;
return s;
}
private:
float r,s;
};
int main()
{
shape *p;
triangle t(3,4,5);
circles c(10);
p=&t;
cout<<"triangle area:"<<p->area()<<endl;
p=&c;
cout<<"circles area:"<<p->area()<<endl;
}
5.5
#include<iostream>
using namespace std;
class Base{
public:
virtual void abstractMethod() = 0;
};
class Derived:public Base{
public:
void abstractMethod(){
cout<<"Derived::abstractMethod is called"<<endl;
}
};
int main()
{
Base* pBase = new Derived;
pBase->abstractMethod();
delete pBase;
return 0;
}