为了账号安全,请及时绑定邮箱和手机立即绑定

拷贝构造函数输出问题

定义好了拷贝构造函数,也“刷出了存在感”但是就是按理想的结果输出。比如t1=t2,t2可以输出jim 5 150,但是t1输出一堆看不懂的码是什么情况?求大神给解答一下

正在回答

3 回答

因为你自己实现了拷贝构造函数,但是没有在拷贝构造函数里对成员变量进行赋值,只是简单的输出了拷贝两个字

0 回复 有任何疑惑可以回复我~
#1

培根熏肉 提问者

谢谢,看了后面的深拷贝和浅拷贝课程我知道了,
2016-01-08 回复 有任何疑惑可以回复我~

teacher.h头文件如下:

#include <stdlib.h>
#include <string>
#include <iostream>
using namespace std;
class Teacher
{
public:
void setName(string name);
string getName();
void setAge(int age);
int getAge();
int getMax();
    Teacher(string name, int age=20);
Teacher();
Teacher(const Teacher&);
private:
string m_strName;
int m_iAge;
const int m_iMax;
};

teacher.cpp 文件如下:

#include "teacher.h"

string Teacher::getName()
{
	return m_strName;
}

int Teacher::getAge()
{
	return m_iAge;
}

int Teacher::getMax()
{
	return m_iMax;
}

Teacher::Teacher():m_iMax(100)
{
	m_strName="jack";
	m_iAge=23;
	cout<<"Teacher()"<<endl;
}

Teacher::Teacher(string name, int age):m_iMax(100)
{
	m_strName=name;
	m_iAge=age;
	cout<<"Teacher(string name='jack', int age=23)"<<endl;
}

Teacher::Teacher(const Teacher&):m_iMax(100)
{
	cout<<"拷贝"<<endl;
}

demo文件如下:

#include <stdlib.h>
#include <iostream>
#include "teacher.h"
using namespace std;

int main(void)
{
Teacher t1;
Teacher t2("jack");
Teacher t3(t1);
Teacher t4=t2;

cout<<t1.getName()<<" "<<t1.getAge()<<" "<<t1.getMax()<<endl;
cout<<t2.getName()<<" "<<t2.getAge()<<" "<<t2.getMax()<<endl;
cout<<t3.getName()<<" "<<t3.getAge()<<" "<<t3.getMax()<<endl;
cout<<t4.getName()<<" "<<t4.getAge()<<" "<<t4.getMax()<<endl;
system("pause");
return 0;
}

结果如下:

http://img1.sycdn.imooc.com//56888f240001863806770442.jpg


0 回复 有任何疑惑可以回复我~

最好上传一下源代码和出问题的乱码

0 回复 有任何疑惑可以回复我~
#1

培根熏肉 提问者

大神你看一下。在下面的回答。我觉得应该是在定义拷贝函数的时候没有给参数赋值。可是如果定义拷贝函数还赋值那怎么还能起到拷贝的作用呢?
2016-01-03 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(上)
  • 参与学习       103410    人
  • 解答问题       701    个

封装--面向对象的基石,本教程力求帮助小伙伴们即学即会

进入课程

拷贝构造函数输出问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信