- #include <iostream>
- using namespace std;
- class Student{
- private:
- char *m_name;
- int m_age;
- float m_score;
- public:
- //声明构造函数
- Student(char *name, int age, float score);
- //声明普通成员函数
- void show();
- };
- //定义构造函数
- Student::Student(char *name, int age, float score){
- m_name = name;
- m_age = age;
- m_score = score;
- }
- //定义普通成员函数
- void Student::show(){
- cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
- }
- int main(){
- //创建对象时向构造函数传参
- Student stu("小明", 15, 92.5f);
- stu.show();
- //创建对象时向构造函数传参
- Student *pstu = new Student("李华", 16, 96);
- pstu -> show();
- return 0;
- }
- #include <iostream>
- using namespace std;
- class Student{
- private:
- char *m_name;
- int m_age;
- float m_score;
- public:
- Student();
- Student(char *name, int age, float score);
- void setname(char *name);
- void setage(int age);
- void setscore(float score);
- void show();
- };
- Student::Student(){
- m_name = NULL;
- m_age = 0;
- m_score = 0.0;
- }
- Student::Student(char *name, int age, float score){
- m_name = name;
- m_age = age;
- m_score = score;
- }
- void Student::setname(char *name){
- m_name = name;
- }
- void Student::setage(int age){
- m_age = age;
- }
- void Student::setscore(float score){
- m_score = score;
- }
- void Student::show(){
- if(m_name == NULL || m_age <= 0){
- cout<<"成员变量还未初始化"<<endl;
- }else{
- cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
- }
- }
- int main(){
- //调用构造函数 Student(char *, int, float)
- Student stu("小明", 15, 92.5f);
- stu.show();
- //调用构造函数 Student()
- Student *pstu = new Student();
- pstu -> show();
- pstu -> setname("李华");
- pstu -> setage(16);
- pstu -> setscore(96);
- pstu -> show();
- return 0;
- }
Student(){}一个类必须有构造函数,要么用户自己定义,要么编译器自动生成。一旦用户自己定义了构造函数,不管有几个,也不管形参如何,编译器都不再自动生成。在示例1中,Student 类已经有了一个构造函数Student(char *, int, float),也就是我们自己定义的,编译器不会再额外添加构造函数Student(),在示例2中我们才手动添加了该构造函数。
实际上编译器只有在必要的时候才会生成默认构造函数,而且它的函数体一般不为空。默认构造函数的目的是帮助编译器做初始化工作,而不是帮助程序员。这是C++的内部实现机制,这里不再深究,初学者可以按照上面说的“一定有一个空函数体的默认构造函数”来理解。最后需要注意的一点是,调用没有参数的构造函数也可以省略括号。对于示例2的代码,在栈上创建对象可以写作Student stu()或Student stu,在堆上创建对象可以写作Student *pstu = new Student()或Student *pstu = new Student,它们都会调用构造函数 Student()。
联系人:徐经理
手机:13907330718
电话:0731-22222718
邮箱:hniatcom@163.com
地址: 湖南省株洲市石峰区联诚路79号轨道智谷2号倒班房6楼603室