c++多态及遇到的问题

#include<iostream>
#include<cstring>
#include<string>
using namespace std;
class vehicle {
protected:
	char* name;
	int year;
	int capacity;
public:
	virtual void printinfo() = 0;
};

class bus :public vehicle {
private:
	char* start;
	char* end;
public:
	bus(char* a,int x,int y,char* b,char* c){
		int len = strlen(a);
		name = new char[len+1];
		for (int i = 0; i < len; i++) {
			name[i] = a[i];
		}
		name[len] = '\0';
		year = x;
		len = strlen(b);
		start = new char[len+1];
		for (int i = 0; i < len; i++) {
			start[i] = b[i];
		}
		start[len] = '\0';
		len = strlen(c);
		end = new char[len+1];
		for (int i = 0; i < len; i++) {
			end[i] = c[i];
		}
		end[len] = '\0';
		capacity = y;
	}
	void printinfo() {
		cout << "Name: " << name << endl;
		cout << "Year: " << year << endl;
		cout << "Capacity: " << capacity << endl;
		cout << "Line: " << start << " to " << end << endl;
	}
};

class car :public vehicle {
private:
	int price;
public:
	car(char *a,int b, int c,int d) {
		int len = strlen(a);
		name = new char[len + 1];
		for (int i = 0; i < len; i++) {
			name[i] = a[i];
		}
		name[len] = '\0';
		year = b;
		capacity = c;
		price = d;
	}
	void printinfo() {
		cout << "Name: " << name << endl;
		cout << "Year: " << year << endl;
		cout << "Capacity: " << capacity << endl;
		cout << "Price: " << price << endl;
	}
};
int main() {
	char name1[100];
	int year1, num1;
	char start[1000], end[1000];
	char name2[100];
	int year2, num2, price;
	cin >> name1 >> year1 >> num1 >> start >>end>> name2 >> year2 >> num2 >> price;
	bus a(name1,year1,num1,start,end);
	car b(name2,year2,num2,price);
	a.bus::printinfo();
	b.car::printinfo();
}

1.起初在对父类的name操作时,未为其分配内存,导致报错:this.name是一个nullptr
2.在对字符串赋值时,直接使用=,导致出现乱码,后采取strlen()取其长度,new一个len+1的空间,后对该空间逐个赋值,并在name[len]赋值 ‘\0’
3.在最后调用
a.bus::printinfo();
b.car::printinfo();
时,起初并未声明作用域,a与b都会调用car中的printinfo
尚未找到原因。

4.起初在cin时变量未对应,导致cout的最后几个变量输出值为垃圾值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值