首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++继承类虚函数

C++继承类虚函数
EN

Stack Overflow用户
提问于 2015-04-17 01:09:48
回答 1查看 164关注 0票数 0

我有一个基类和一个派生类,我正在尝试实现一个虚拟加载函数来向SportCar类添加一个额外的成员engineSize,它应该加载包含在car类中的基本汽车细节,即CarName,Colour等,但也包括SportsCar类所独有的engineSize。但似乎效果并不好。下面我已经包含了我的代码。目前,它只是默认包含在默认构造函数中的细节。“未知”。

代码语言:javascript
复制
#include "stdafx.h"

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

 class Car
{
 public:
   Car();
   virtual void Load(ifstream& carFile);
   int LoadString(string filename);

protected:
  string CarName;
  int Age;
  string Colour;
  double Price;
  int countUsers;
  Car *ptrToCarList;
};

class SportsCar : public Car
{
public: 
  SportsCar();
  virtual void LoadSports(ifstream& carFile);
  int LoadString(string filename);
  void display();
protected:
  int engineSize;
  SportsCar *ptrToSportsCarList;
  int countUsers;

};

Car::Car()
{
  CarName = "Unknown";
  countUsers = 2;
}

void Car::Load(ifstream& carFile)
{
  carFile >> CarName >> Age >> Colour >> Price;
}

int Car::LoadString(string filename)
{
  ifstream inFile(filename);

  if (!inFile)
  {
    cout << "Sorry, file not found" << endl;
    return -1;
  }

ptrToCarList = new Car[countUsers];

for (int i = 0; i < countUsers; i++)
{
    ptrToCarList[i].Load(inFile);
}
inFile.close();
return 0;
}

void SportsCar::display()
{
  cout << CarName << " " << Age << " " << Colour << " " << Price << " " <<engineSize <<endl;

}


void SportsCar::LoadSports(ifstream& carFile)
{
  Car::Load(carFile);
  carFile >> engineSize;
}

SportsCar::SportsCar() :Car()
{


}


int SportsCar::LoadString(string filename)
{
  ifstream inFile(filename);

if (!inFile)
{
    cout << "Sorry, file not found" << endl;
    return -1;
}

ptrToSportsCarList = new SportsCar[countUsers];

for (int i = 0; i < countUsers; i++)
{
    ptrToSportsCarList[i].LoadSports(inFile);
}
inFile.close();
return 0;
}

int main()
{
  SportsCar example2;
  example2.LoadString("sportsCarFile.txt");
  example2.display();
  return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2015-04-17 01:43:40

如果你想把很多车都装在车里,这意味着你的设计出了问题。

Garage ;)

  • example2.LoadString("sportsCarFile.txt");不会像你预期的那样调用LoadSports,因为countUsers是0。因为在派生类中,你有对Car,

  • 的构造函数隐藏初始化的声明,你有ptrToSportsCarListptrToCarList。您可能希望只使用ptrToCarList来容纳汽车,因为您可以在LoadSports function

  • Consider上使用多态性,将LoadSports移动到基类,并将其重命名为更通用的类,并使其虚拟,以便可以从ptrToCarList调用,而不是像pt中提到的那样从ptrToSportsCarList调用。2.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29681602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档