//...
};
//you may use in this way:
OneClass oneObj(7);
OneClass anotherObj;
anotherObj=oneObj;//(1)
//...
//int Compare(OneClass one,OneClass two);
int k=Compare(oneObj,anotherObj);//(2)
//...
在本程序的场景下,上面的代码是可以完好工作的,但您清楚(1)与(2)系统都作了什么了吗?您是否知道,如果您的初始化工作做的不好的话,即使,就沿用上面的初始化习惯,您的程序很容易就崩溃了呢。
答案是,(1)语句执行时,默认的,系统试图把oneObj的资源全部copy给anotherObj,但用户申请的资源(new来的:),却传入的是地址;(2)语句的默认形参传递遵循同样的规则。
当然这与java与c#是不同的,因为java与c#的对象是引用类型。而c++,除非您强行定义为引用类型的,它就不是。
我们来看下面的例子,第一遍我建议您只看程序,不要往下看,看您能否发现什么问题。
//human.h
#pragma once
#define NULL 0
class Name
{
char *name;
public:
Name(char *_name=NULL):name(_name) {}
~Name() { }
char *getName(){ return name;}
};
class Human
{
Name *name;//
int ID; //唯一化标志
public:
Human(int id=0,char *_name=NULL);
~Human(void);
int getID()const { return ID;}
Name *getName() { return name;}
};
//human.cpp Human::Human(int id,char *_name):ID(id) Human::~Human(void) //fmain.cpp
#include "human.h"
#using
{
name=new Name(_name);//初始化:指针
}
{
delete name;//析构时释放资源
}
|
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容 本站提醒:不要进行人身攻击。谢谢配合。 |