震惊!c语言学了一辈子都不知道的小技巧。第二十章。

标题党,我这算不上小技巧就就是一些小小的总结。

终于到了最后一章。讲的是面向对象编程的一些进阶技巧。

继承与派生

继承:从先辈处得到属性和行为特征

类的继承:新的类从已有的类那里得到已有的特性

继承的同时也可以改写一些,拥有自己这个类的东西。

派生从基类那里继承,还可以调整从基类接收的成员—代码的扩充 。

#include<iostream>

using namespace std;

class shape{

protected:

double s;

public:

void show(){cout<<"s= "<<s<<endl;}

double GetArea(){

return s;

}

};

class rectangle: public shape{

protected:

double c,k;

public:

rectangle(double l=1,double w=1):c(l),k(w){

s=c*k;

}

double GetArea(){

return s;

}

void setrectangle(double l,double w){

c=l;k=w;

s=c*k;

}

double getc(){return c;}

double getk(){return k;}

void show(){

cout<<"c="<<c<<endl;

cout<<"k="<<k<<endl;

shape::show();

}

};

class sqare: public rectangle{

protected:

double x;

public:

sqare(double X=1):x(X){

s=x*x;

}

double GetArea(){

return s;

}

void setsqare(double l){

x=l;

s=x*x;

}

double getx(){return x;}

double getk(){return k;}

void show(){

cout<<"c="<<c<<endl;

cout<<"k="<<k<<endl;

shape::show();

}

};

class Circle : public shape{

protected:

double x;

public:

Circle(double l=1):x(l){

s=1.0*x*x*3.14;

}

double GetArea(){

return s;

}

void setCircle(double l){

x=l;

s=1.0*x*x*3.14;

}

double getr(){return x;}

void show(){

shape::show();

}

};

int main(){

rectangle a;

double x,y,z,m;

cin>>x>>y;

a.setrectangle(x,y);

Circle b;

cin>>z;

b.setCircle(z);

cin>>m;

sqare c;

c.setsqare(m);

cout<<a.GetArea()<<endl;

cout<<b.GetArea()<<endl;

cout<<c.GetArea()<<endl;

}

virtual虚函数

可以让派生类在引用函数时用自己的,class vehicle{

public:

virtual void run()=0;

virtual void stop()=0;

};

class bike:public vehicle{

public:

void run(){cout<<"自行车在行进!"<<endl;}

void stop(){cout<<"自行车停了下来!"<<endl;}

};

class car:public vehicle{

public:

void run(){cout<<"小汽车在行进!"<<endl;}

void stop(){cout<<"小汽车停了下来!"<<endl;}

};

class motorcycle:public virtual bike{

public:

void run(){cout<<"摩托车在行进!"<<endl;}

void stop(){cout<<"摩托车停了下来!"<<endl;}

};

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务