代码如下:
Shape.h
#ifndef SHAPE_H_INCLUDED
#define SHAPE_H_INCLUDED
class Shape{
public:
virtual float GetPircumference()=0;
};
class Rectangle:public Shape
{
private:
float R_a;
float R_b;
public:
Rectangle(float a,float b);
float GetPircumference();
};
class Circle:public Shape
{
private:
float C_a;
public:
Circle(float a);
float GetPircumference();
};
#endif // SHAPE_H_INCLUDED
Shape.cpp
#include<iostream>
#include "Shape.h"
//Rectangle::Rectangle(int a,int b):Rectangle::R_a(a),R_b(b){}//这种初始化一般用在没有分头文件声明和具体实现,this用的多
Rectangle::Rectangle(float a,float b)
{
this->R_a =a;
this->R_b =b;
}
float Rectangle::GetPircumference()
{
float R_c =0;
R_c = 2*(this->R_a + this->R_b;
return R_c;
}
//Circle::Circle(int a):Circle::C_a(a){}
Circle::Circle(float a)
{
this->C_a =a;
}
float Circle::GetPircumference()
{
float R_c =0;
R_c = 2*this->C_a*3.14;
return R_c;
}
main.cpp
#include <iostream>
#include "Shape.h"
using namespace std;
int main()
{
Shape *rect =new Rectangle(3,4);
cout <<rect->GetPircumference()<<endl;
Shape *cirle =new Circle(5);
cout <<cirle->GetPircumference()<<endl;
return 0;
}
编译出错:

解决办法:
- 右键点击项目

- 然后把未勾选的都选上并点击OK


- 最后重新编译运行
问题原因:
- 新建file时候(.h或者.cpp)未勾选编译类型



- 参考:https://blog.youkuaiyun.com/lonely_gfwolf/article/details/77837650
本文通过C++代码示例,展示了如何使用抽象基类和派生类实现多态,包括Rectangle和Circle类的定义及周长计算。同时,解决了一个常见的编译错误,即在创建和编译新文件时未正确设置编译类型。
1468





