震惊!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;}
};