ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

小学生学C++编程语法知识(什么情况下会自动生成默认构造函数)

2026/8/9 12:15:26 拓冰建站 浏览量
小学生学C++编程语法知识(什么情况下会自动生成默认构造函数) 对于小学生可以先记住一句话如果我们没有写任何构造函数C 编译器可能会偷偷帮我们生成一个默认构造函数但是一旦我们自己写了某些构造函数编译器通常就不再自动生成。下面详细讲解。一、什么是默认构造函数先看一个类class Student { };我们没有写任何东西。但是Student s;为什么可以创建对象因为编译器偷偷帮我们生成了class Student { public: Student() { } };这个没有参数的构造函数叫默认构造函数default constructor二、什么时候会自动生成默认构造函数主要有以下情况。情况1类里面完全没有构造函数这是最常见情况。例如class Student { public: int age; };我们没有写Student() { }那么编译器会自动生成Student() { }所以Student s;可以。但是注意自动生成的默认构造函数不会自动给普通变量初始化。例如class Student { public: int age; }; int main() { Student s; cout s.age; }这里s.age里面是什么不确定因为int age;没有初始化。可能123456也可能0也可能垃圾值情况2类有成员对象但自己没有构造函数例如class Book { }; class Student { public: Book b; };Student没有构造函数。编译器生成Student() { }但是创建 StudentStudent s;时必须先创建Book b;所以调用Book()如果 Book 有默认构造函数没问题。三、什么时候不会自动生成默认构造函数这是考试重点。情况1自己写了带参数构造函数例如class Student { public: Student(int x) { } };现在我们自己写了构造函数。那么编译器认为“你已经设计好了我不帮你了。”所以不会生成Student() { }因此Student s;错误。因为没有Student()但是这样可以Student s(10);因为匹配Student(int)情况2自己写了拷贝构造函数例如class Student { public: Student(const Student s) { } };我们自己写了拷贝构造函数。编译器不会生成默认构造函数。所以Student a;错误。但是Student b(a);可以。四、课堂练习题看class A { }; class B { public: B(int x) { } };问下面哪些可以自动生成默认构造函数1.A a;可以。为什么因为A没有任何构造函数。自动生成A()2.B b;错误。因为B自己写了B(int)所以没有B()3.B b(5);可以。因为调用B(int)五、为什么 C 这样设计同学们可以理解成编译器像一个助手如果你说“我什么都没安排。”编译器“好我帮你安排一个最简单的。”但是如果你说“我要学生必须输入年龄才能创建。”例如Student(int age) { }编译器“你已经制定规则了我不能偷偷增加一个空创建。”否则Student s;会绕过你的设计。六、特殊成员函数总结表C 一个类默认有6个特殊函数函数作用什么时候自动生成默认构造函数创建空对象没有任何构造函数时析构函数释放资源通常自动生成拷贝构造函数复制对象没有自己写时拷贝赋值运算符对象赋值没有自己写时移动构造函数移动对象满足条件时移动赋值运算符移动赋值满足条件时七、小学生记忆口诀没有构造 编译器造。 自己写了 编译器跑。 想要空对象 class A { }; 可以。 写了 A(int x) 以后 A a; 不可以。八、和前面“对象创建过程”联系创建Student s;过程第一步找到Student()第二步执行构造函数。如果没有写构造函数编译器帮你生成。如果你写了Student(int)那么默认构造函数不存在。所以“自动生成默认构造函数”的核心判断方法看类里面有没有用户自己写的构造函数。这也是 GESP/CSP C 面向对象部分非常喜欢考的知识点。