初学C++,不懂程序为何错了
初学C++,不懂程序为什么错了
1、编写一个程序。有一个汽车类vehicle,它具有一个需传递参数的构造函数,汽车类vehicle中的数据成员为:车轮个数wheels和车重weight放在保护段中,汽车类vehicle中的公有成员函数为:get_wheels()(返回车轮个数的值)、get_weight()(返回车重的值)、wheel_load()(返回每个轮胎的载重量的值:weight/wheels)、print()(输出车轮的个数和车重的公斤数);小车类car是vehicle类的私有派生类,它具有一个需传递参数的构造函数,小车类car中的私有数据成员为:车载人数passenger_load,小车类car中的公有成员函数为:get_passengers()(返回车载人数的值)、print()(输出小车车轮的个数和车重的公斤数以及车载人数的个数);
#include<iostream>
using namespace std;
class Vehicle{
public:
Vehicle(int x,float y){
wheels=x;
weight=y;
};
int get_wheels(){return wheels;};
float get_weight(){return weight;};
float wheel_load(){return weight/wheels;};
void print(){
cout<<"车轮: "<<wheels<<"个"<<endl;
cout<<"重量: "<<weight<<"公斤"<<endl;
};
protected:
int wheels;
float weight;
};
class Car:public Vehicle{
public:
Car(int x,float y,int z){
wheels=x;
weight=y;
passenger_load=z;
};
int get_passengers(){return passenger_load;}
void print(){
cout<<"小车:"<<endl;
cout<<" ";
Vehicle::print();
cout<<" "<<"载人: "<<passenger_load<<"人"<<endl;}
private:
int passenger_load;
};
int main(){
Car car1(4,1000,5);
car1.print();
return 0;} 软件显示error C2512: “Vehicle”: 没有合适的默认构造函数可用 不懂~~~
------解决方案--------------------
是这样的,同学,如果你显式提供了一个构造函数,
那么就必须提供带0个参数的默认构造函数。
修正的方法可以是这样,
为构造函数中的参数全部添加上默认值:
Vehicle(int x,float y) 改成 Vehicle(int x=0,float y=0)
Car(int x,float y,int z) 改成 Car(int x=0,float y=0,int z=0)
如此,就可以编译通过了。
------解决方案--------------------
你用到了继承,而基类中的构造函数又有参数,因而在继承类中构造函数要传参数给基类。很多教材中都强调了这一点的。
------解决方案--------------------
要么初始化积累构造函数的参数,要么在子类构造函数后加上积累初始化参数列表,总之你需要让积累的构造函数顺利执行,不然子类是不会出生的!
------解决方案--------------------
派生类的构造函数初始化表中调用基类的构造函数
1、编写一个程序。有一个汽车类vehicle,它具有一个需传递参数的构造函数,汽车类vehicle中的数据成员为:车轮个数wheels和车重weight放在保护段中,汽车类vehicle中的公有成员函数为:get_wheels()(返回车轮个数的值)、get_weight()(返回车重的值)、wheel_load()(返回每个轮胎的载重量的值:weight/wheels)、print()(输出车轮的个数和车重的公斤数);小车类car是vehicle类的私有派生类,它具有一个需传递参数的构造函数,小车类car中的私有数据成员为:车载人数passenger_load,小车类car中的公有成员函数为:get_passengers()(返回车载人数的值)、print()(输出小车车轮的个数和车重的公斤数以及车载人数的个数);
#include<iostream>
using namespace std;
class Vehicle{
public:
Vehicle(int x,float y){
wheels=x;
weight=y;
};
int get_wheels(){return wheels;};
float get_weight(){return weight;};
float wheel_load(){return weight/wheels;};
void print(){
cout<<"车轮: "<<wheels<<"个"<<endl;
cout<<"重量: "<<weight<<"公斤"<<endl;
};
protected:
int wheels;
float weight;
};
class Car:public Vehicle{
public:
Car(int x,float y,int z){
wheels=x;
weight=y;
passenger_load=z;
};
int get_passengers(){return passenger_load;}
void print(){
cout<<"小车:"<<endl;
cout<<" ";
Vehicle::print();
cout<<" "<<"载人: "<<passenger_load<<"人"<<endl;}
private:
int passenger_load;
};
int main(){
Car car1(4,1000,5);
car1.print();
return 0;} 软件显示error C2512: “Vehicle”: 没有合适的默认构造函数可用 不懂~~~
------解决方案--------------------
是这样的,同学,如果你显式提供了一个构造函数,
那么就必须提供带0个参数的默认构造函数。
修正的方法可以是这样,
为构造函数中的参数全部添加上默认值:
Vehicle(int x,float y) 改成 Vehicle(int x=0,float y=0)
Car(int x,float y,int z) 改成 Car(int x=0,float y=0,int z=0)
如此,就可以编译通过了。
------解决方案--------------------
你用到了继承,而基类中的构造函数又有参数,因而在继承类中构造函数要传参数给基类。很多教材中都强调了这一点的。
------解决方案--------------------
要么初始化积累构造函数的参数,要么在子类构造函数后加上积累初始化参数列表,总之你需要让积累的构造函数顺利执行,不然子类是不会出生的!
------解决方案--------------------
派生类的构造函数初始化表中调用基类的构造函数