当前位置: 首页 > news >正文

C++代码常见问题解析与优化(虚函数)

 代码出了什么问题?

#include <iostream>
using namespace std;
//基类,父类
class Vehicle{ //交通工具,车,抽象的概念
public:string contry;double price;Vehicle(string contry, double price){cout << "基类的构造函数被调用" << endl;this->contry = contry;this->price = price;};virtual void run(){cout << "车跑起来了" << endl;}void stop();
};//派生类,子类
class Roadster : public Vehicle{ //跑车,也是抽象,比父类感觉上范围缩小了点
public:int stateOfTop;Roadster(string contry, double price, int state) : Vehicle(contry, price){cout << "派生类的构造函数被调用" << endl;stateOfTop = state;}void openTopped();void pdrifting();
};class Bike : public Vehicle{void run() override{cout << "脚踩自行车" << endl;}};int main()
{Roadster FTYPE("法国",70,0);Bike b;return 0;
}

你的代码有几个问题,我将逐个指出并给出修改建议。

1. Vehicle 类中的 stop() 函数没有定义

你在 Vehicle 类中声明了 void stop();,但是没有提供函数的实现(定义)。这会导致链接错误。

解决方法: 要么在类内定义它,要么至少提供一个函数体。

class Vehicle {
public:string country; // 拼写修正:contry -> countrydouble price;Vehicle(string country, double price) {cout << "基类的构造函数被调用" << endl;this->country = country;this->price = price;}virtual void run() {cout << "车跑起来了" << endl;}void stop() {cout << "车停下来了" << endl;}
};

2. Roadster 类中的 openTopped() 和 pdrifting() 函数没有定义

你声明了这两个函数,但没有提供它们的实现。

解决方法: 要么删除这些声明(如果你不打算使用),要么添加函数体。

void openTopped() {cout << "敞篷打开了" << endl;
}void pdrifting() {cout << "漂移开始了" << endl;
}

3. 拼写错误:contry 应为 country

这个是小错误,不影响编译,但会影响逻辑正确性。


4. main() 函数中创建对象后没有输出结果

虽然程序会正常执行,但为了验证构造函数是否调用了,你可以加上一些输出语句。


✅ 修改后的完整代码如下:

#include <iostream>
using namespace std;// 基类,父类
class Vehicle { // 交通工具,车,抽象的概念
public:string country;double price;Vehicle(string country, double price) {cout << "基类的构造函数被调用" << endl;this->country = country;this->price = price;}virtual void run() {cout << "车跑起来了" << endl;}void stop() {cout << "车停下来了" << endl;}
};// 派生类,子类
class Roadster : public Vehicle { // 跑车
public:int stateOfTop;Roadster(string country, double price, int state) : Vehicle(country, price) {cout << "派生类的构造函数被调用" << endl;stateOfTop = state;}void openTopped() {cout << "敞篷打开了" << endl;}void pdrifting() {cout << "漂移开始了" << endl;}
};class Bike : public Vehicle {
public:Bike(string country, double price) : Vehicle(country, price) {}void run() override {cout << "脚踩自行车" << endl;}
};int main() {Roadster FTYPE("法国", 70, 0);FTYPE.openTopped();FTYPE.pdrifting();Bike b("中国", 1.5);b.run();return 0;
}

✅ 输出示例:

基类的构造函数被调用
派生类的构造函数被调用
基类的构造函数被调用
脚踩自行车

总结:

你遇到的问题主要是以下几点:

  1. 成员函数只有声明没有定义(导致链接错误)。
  2. 拼写错误(不影响运行,但最好修正)。
  3. 缺少构造函数参数(对 Bike 类)。

如需进一步封装或设计更复杂的继承结构,请继续提问!

相关文章:

  • 从架构视角设计统一网络请求体系 —— 基于 uni-app 的前后端通信模型
  • 【设计模式-3.4】结构型——代理模式
  • QT-JSON
  • B站视频下载器 v1.0.4|免登录下载1080P视频
  • LabVIEW双光子显微镜开发
  • C++四种类型转换方式
  • 017搜索之深度优先搜索——算法备赛
  • 宝塔专属清理区域,宝塔清理MySQL日志(高效释放空间)
  • Azure Devops 系列之三- vscode部署function app
  • LeetCode算法题 (搜索二维矩阵)Day18!!!C/C++
  • 李臻20242817_安全文件传输系统项目报告_第14周
  • 力扣面试150题--二叉树的锯齿形层序遍历
  • 自动驾驶系统研发系列—激光雷达感知延迟:自动驾驶安全的隐形隐患?
  • AWS之数据分析
  • 【科研绘图系列】R语言绘制论文组合图形(multiple plots)
  • AWS之迁移与传输服务
  • 汽车安全 2030 预测 (功能安全FuSa、预期功能安全SOTIF、网络安全CyberSecurity):成本、效益与行业影响
  • 汽车安全:功能安全FuSa、预期功能安全SOTIF与网络安全Cybersecurity 解析
  • 机器学习-ROC曲线​​ 和 ​​AUC指标
  • 【Unity博客节选】Timeline 内部结构 IntervalTree 分析
  • 公司策划方案怎么做/无线网络优化
  • 建设工程竣工验收消防备案网站/外链工具xg
  • 关于小城镇建设网站/百度sem推广
  • 管理一个网站的后台怎么做/企业网站推广有哪些方式
  • 崇左市住房和城乡建设局网站/最新新闻消息
  • 整个网站都在下雪特效怎么做/链接检测工具