#include<stdio.h> #include<iostream> using namespace std; class Goods { public: virtual double goodsprice()=0; virtual double show()=0; virtual ~Goods(){} }; class rice: public Goods { private: double weight; double price; double goodsprice() { return weight*price; } public: rice(){} rice(const double w,const double p) { weight=w; price=p; } double show() { return goodsprice(); } friend double total(const rice &r,const pork&p,const oil &o); }; class pork : public Goods { private: double weight; double price; double goodsprice() { return weight*price; } public: pork(const double w,const double p) { weight=w; price=p; } double show() { return goodsprice(); } friend double total(const rice &r,const pork &p,const oil &o); }; class oil : public Goods { private: double weight; double price; double goodsprice() { return weight*price; } public: oil(const double w,const double p) { weight=w; price=p; } double show() { return goodsprice(); } friend double total(const rice &r,const pork &p,const oil &o); }; double total(const rice &r,const pork &p,const oil &o) { return (r.show()+p.show()+o.show()); } int main() { rice r(5.0,2.4); pork p(2.0,10.0); oil o(1.0,50.0); cout<<"大米价格为"<<r.show()<<"元"<<endl; cout<<"猪肉价格为"<<p.show()<<"元"<<endl; cout<<"油价格为"<<o.show()<<"元"<<endl; cout<<"商品的总价格为"<<total(r,p,o)<<"元"<<endl; system("pause"); return 0; } 哪里出错了
时间: 2024-03-19 09:42:13 浏览: 13
这段代码存在一些问题:
1. 头文件 `<iostream>` 应该改为 `<iostream.h>`,因为它是 C++98 标准中的头文件。
2. `using namespace std;` 可能会引起名称空间污染,建议使用 `std::` 前缀。
3. `Goods` 类中的纯虚函数 `goodsprice()` 和 `show()` 没有实现,需要在子类中实现。
4. `rice` 类中的构造函数没有初始化 `Goods` 类。
5. `pork` 和 `oil` 类中,构造函数中没有初始化 `Goods` 类。
6. `rice`、`pork` 和 `oil` 类中的 `show()` 函数应该返回价格而不是 `goodsprice()`。
7. `total()` 函数中的参数类型应该为 `const rice&`、`const pork&` 和 `const oil&`。
8. `total()` 函数中的 `show()` 调用应该改为 `goodsprice()`。
下面是修改后的代码:
相关问题
#include <iostream> #include <stdio.h> #include <math.h> #define N 5
这段代码是C++中的预处理指令,用于引入头文件和定义宏。具体解释如下:
1. `#include <iostream>`:引入iostream头文件,该头文件包含了C++中输入输出流的相关函数和对象,例如cout和cin。
2. `#include <stdio.h>`:引入stdio.h头文件,该头文件包含了C语言中的输入输出函数,例如printf和scanf。
3. `#include <math.h>`:引入math.h头文件,该头文件包含了数学函数的声明和定义,例如sqrt和pow。
4. `#define N 5`:定义一个宏常量N,并将其值设置为5。宏定义是一种在编译前进行文本替换的机制,这里将所有出现N的地方都替换为5。
这段代码的作用是引入所需的头文件和定义一个宏常量N,并没有实际的功能代码。
#include<stdio.h> #include<stdlib.h>
#include<stdio.h>和#include<stdlib.h>是C语言中的预处理指令,用于引入标准输入输出函数和动态内存分配函数。它们通常一起使用,但有时候会出现报错的情况。
报错的原因可能是由于编译器或IDE的设置问题,或者是代码中的其他错误导致的。在某些情况下,删除#include<stdlib.h>可能会解决报错问题,但这并不是一个通用的解决方案。
为了解决这个问题,你可以尝试以下几个步骤:
1. 确保你的编译器或IDE已正确配置,并且能够找到正确的头文件路径。
2. 检查你的代码中是否存在其他错误,例如语法错误、函数声明错误等。
3. 尝试使用不同的编译器或IDE来编译你的代码,看是否能够解决问题。
4. 如果以上步骤都没有解决问题,你可以尝试在代码中手动声明所需的函数,而不使用#include<stdlib.h>。例如,你可以在代码中添加以下声明:
```c
void *malloc(size_t size);
void free(void *ptr);
```
请注意,这只是一种临时解决方案,如果你的代码依赖于stdlib.h中的其他函数或定义,可能会导致其他问题。