#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的最后几个变量输出值为垃圾值