C++构造函数传值问题

firandiir firandiir 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

// E_NotReturnRefOfPriData.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

class address
{
public:
address();
address(string address);
address(const address &);
virtual ~address(){}
string get_address() const{return address_value;}
string *_w64 get_address_of_address_value(){return &address_value;}

//address &operator =(const address& add){ address_value=add.get_address();size=static_cast<unsigned int>(strlen(add.get_address().c_str()));return *this;}
friend ostream &operator <<(ostream &s,address &r);

private:
string address_value;
unsigned int size;
};

address::address()
{
address_value="empty address";
size=static_cast<unsigned int>(strlen(address_value.c_str()));
//试验string类自带的函数"size()"
}

address::address(string address)
{
if(address.empty())
{
address_value="empty address";
}
else
{
address_value=address;
}
size=static_cast<unsigned int>(strlen(address_value.c_str()));
//试验string类自带的函数"size()"
}
address::address(const address &Ref_address)
{
string address_value=Ref_address.get_address();
//试验string类自带的函数"size()"
}



//以下做法是错误的,虚函数必须在体内实现。
//详见微软官方解析:http://msdn.microsoft.com/en-us/library/68y53azf(VS.71).aspx
//virtual address::~address(){}

ostream &operator <<(ostream &s,address &r)
{
cout<<r.get_address()<<endl;
return s;
}


class person:public address
{
public:
person():person_address("China"),age(20),name("Cora"){}
//person(address person_address_val,int age_val,string name_val):person_address(person_address_val),age(age_val),name(name_val){}
person(address person_address_val,int age_val,string name_val)
{
person_address=person_address_val;
age=age_val;
name=name_val;
}

//复制构造函数缺省
~person(){}

//访问变量
address &get_person_address(){return person_address;}
string get_person_name(){return name;}
int get_person_age(){return age;}


friend ostream & operator <<(ostream &s,person &r);

private:
address person_address;
int age;
string name;
};

ostream & operator<<(ostream &s,person &r)
{
cout<<"Name:"<<r.get_person_name()<<endl;
cout<<"Age:"<<r.get_person_age()<<endl;
cout<<"Address:"<<r.get_person_address()<<endl;
return s;
}


int _tmain(int argc, _TCHAR* argv[])
{
person p1;
cout<<p1<<endl
;

address ad("China Shanghai");
person p2(ad,26,"Zhou Yanfei");

cout<<p2<<endl;
//address add1("");
//add1=s.
system("pause");
return 0;
}




输出的结果是:
Name:Cora
Age:20
Address:China


Name:Zhou Yanfei
Age:23
Address:

实在搞不懂第二个Address为什么是空的,在person的第二个构造函数设了断点,发现第一个参数ad的address_value是空的,size显示4268428,奇怪了,为什么值传不进去呢?

望高手赐教
...全文

相关推荐

评论 16
收藏 已收藏
分享
返回顶部
firandiir
新手乐园 33,315 成员 41,769 内容