1.若一个类提供构造函数,则该类就不提供默认的构造函数。
2.派生类会默认调用基类的无参构造函数
#include <iostream>
#include <cstdio>
class CPoint{
public:
CPoint(int x){
printf("has synax\n");
}
CPoint(){
printf("no synax\n");
}
};
class Point : public CPoint{
public:
Point(int x){
}
};
Point p(4);
int main(){
return 0;
}
3.若基类只有有参的构造函数,而派生类只有无参的构造函数(且不存在默认的参数)会报错。
#include <iostream>
#include <cstdio>
class CPoint{
public:
CPoint(int x){
printf("has synax\n");
}
/*
CPoint(){
printf("no synax\n");
}
*/
};
class Point : public CPoint{
public:
Point(int x){
}
};
Point p;
int main(){
return 0;
}
(原因见2)因为派生类默认调用基类的无参构造函数,不存在,且有父类参构造函数没有得到参数值,故会报错。
则处理的方法有以下两种
1)需要对基类的参数进行初始化,通过参数初始化表对基类的参数赋值。
2)更改基类的构造函数,使其具有默认的参数。
方法1(对基类构造函数通过初始化表赋初值)—-————实现如下:
#include <iostream>
#include <cstdio>
class CPoint{
public:
CPoint(int x){
printf("has synax\n");
}
CPoint(){
printf("no synax\n");
}
};
class Point : public CPoint{
public:
Point():CPoint(1){
}
};
Point p;
int main(){
return 0;
}
方法2(更改基类的构造函数,使其具有默认的参数。)----实现如下
#include <iostream>
#include <cstdio>
class CPoint{
public:
CPoint(int x = 0){
printf("has synax\n");
}
/*
CPoint(){
printf("no synax\n");
}
*/
};
class Point : public CPoint{
public:
Point(){
}
};
Point p;
int main(){
return 0;
}
以上代码经过VS2013编译通过