c++ - 关于默认构造函数,C++ OOP 中的对象初始化/使用
问题描述
我最近开始学习 C++ 中的 OOP,并开始解决有关它的示例任务。我想在为其CStudent
创建默认构造函数后实例化该类的对象。但是编译器无法编译代码。我想问这是为什么?
解决方案
当你在课堂上写作时:
CStudent();
CStudent(string name, string fn);
...您只声明两个构造函数,一个默认(不带参数)和一个带两个字符串。
声明它们之后,您需要定义它们,就像定义方法一样,getName
或者getAverage
:
// Outside of the declaration of the class
CStudent::CStudent() { }
// Use member initializer list if you can
CStudent::CStudent(std::string name, string fn) :
name(std::move(name)), fn(std::move(fn)) { }
在 C++ 中,您还可以在类中声明它们时定义它们:
class CStudent {
// ...
public:
CStudent() { }
CStudent(std::string name, string fn) :
name(std::move(name)), fn(std::move(fn)) { }
// ...
};
从 C++11 开始,您可以让编译器为您生成默认构造函数:
// Inside the class declaration
CStudent() = default;
推荐阅读
- php - 可以在 Laravel / PHPUnit 中模拟模型方法输出吗?
- php - PDO 查询未将数据插入 MySQL 数据库,未显示任何错误
- oauth-2.0 - 使用 oAuth 退出 Microsoft AAD 时,有没有办法避免“选择帐户”提示?
- php - 如何更改 wordpress 主题的语言?
- python - 如何使用没有 IOError 的 GCS 路径加载文件?
- csv - 当它不是文件的第一行时如何自动设置标题?
- ssms - SQL Server Management Studio 17.9 字体大小不起作用
- javascript - $(document).ready 故障,$(document).resize 有效 - 相同的处理程序
- java - OpenJDK 11.0.2 的 Spring Boot 2.0 请求映射问题
- python - 选择多个单词的首字母