原来能跑的代码
#include <iostream>
class Camera {
public:
void setEncodingAlgorithm(std::string algorithm) {
std::cout << "设置编码算法" << std::endl;
}
};
class CarRecorder : public Camera {};
int main() {
// 测试代码
CarRecorder recorder;
recorder.setEncodingAlgorithm("H.264");}
但是我想改成构造函数
#include <iostream>
class Camera {
public:
Camera(std::string algorithm){ //设置编码算法
algorithm = "H.264";
}
};
class CarRecorder : public Camera {};
int main() {
// 测试代码
CarRecorder recorder;}
这时会出现错误
我们这时得添加: Camera() = default;
这段代码是 Camera 类的默认构造函数的声明,它使用了 C++11 的 default 关键字来声明默认构造函数。
当我们在类中显式地声明了任何构造函数(包括拷贝构造函数、移动构造函数或其它有参构造函数)时,C++ 编译器将不再自动生成默认构造函数。但是,我们可以使用 default 关键字来显式地声明一个默认构造函数,让编译器再次自动生成它。
在这个例子中,Camera 类中只定义了一个带参数的构造函数,因此编译器将不会自动生成默认构造函数。我们可以使用 default 关键字来声明一个默认构造函数,这样在需要创建一个未初始化的 Camera 对象时,我们就可以使用这个默认构造函数。
但是这样重构的构造函数不会自动执行,于是这样改
#include <iostream>
class Camera {
public:
Camera(){ //设置编码算法
algorithm = "H.264";
}
private:
std::string algorithm;
};
class CarRecorder : public Camera {};
int main() {
// 测试代码
CarRecorder recorder;}