复制构造函数语法&显示构造函数的值

时间:2016-12-28 17:26:36

标签: c++ constructor

我正在编写一个程序,我需要使用复制构造函数。由于我是使用复制构造函数的新手,我不知道我的声明和复制构造函数的使用是否有效?

另外在这里我面临显示功能的问题,错误是:: error: prototype for 'int Student::display_student()' does not match any in class 'Student'。这是什么错误?

#include <string>
#include <iostream>

using namespace std;

class Student
{
    private:
        int rollno;
        string name;
    public:
        Student(); 
        Student(int x, string str); 
        Student(Student &s); 
        void display_student();
};

Student::Student()
 {
  rollno = 0 ;
  name = "" ;
 }

 Student::Student(int x, string str)
 {
  rollno=x ;
  name=str ;
 }

Student::Student(Student &s)
{
  rollno = s.rollno ;
  name = s.name;
}

Student::display_student()
{
    cout << "Student Name ::" << name << endl << "Student Roll No. ::" << rollno << endl;
}


int main()
{
 Student A;
 Student B(09,"Jhonny");
 Student C(B);
 A.display_student();
 B.display_student();
 C.display_student();
 return 0;
}

2 个答案:

答案 0 :(得分:1)

您没有在Student::display_student()的定义中指定返回值。尝试:

void Student::display_student()
{
    cout << "Student Name ::" << name << endl << "Student Roll No. ::" << rollno << endl;
}

编译器默认采用int Student::display_student()。类声明包含void display_student()的原型,但您只提供了函数int display_student()的定义。

答案 1 :(得分:0)

复制构造函数签名通常使用const引用。在您的情况下,您可以使用默认实现:

Student(const Student&) = default;

您还可以添加副本分配:

Student& operator=(const Student&) = default;