C++ 拷贝构造函数 小程序问题

作者&投稿:农很 (若有异议请与网页底部的电邮联系)
c++中拷贝构造函数问题~

1、对,如果你定义了任意形式的构造函数,默认构造函数就没有了,如果需要就要自己显示定义。

2、简单来说,当你将构造函数声明为private,那么就只有你的类的内部函数才可以构造类对象,而不允许外部构造。 这样编译器就不能使用构造函数了。 还有的情况也是可以:比如 你要用类似工厂类, 通过getInstance函数产生类,而不允许直接生成类,在getInstance中构造类。

如果要去掉就把 申明和函数全部不要,这样编译器会生成一个默认拷贝构造函数;
如果有申明,却把实现注释了,那编译器就不会自动生成,这样你就必须自己写,不然他就找不到。
望采纳

//#include "stdafx.h"
#include "iostream.h"

class CAT
{
int *itsAge;
public:
CAT():itsAge(new int(5)){}
//增加拷贝构造函数
CAT(CAT &c)
{
itsAge = new int(0);
*itsAge=*c.itsAge;//把c中的itsAge指针指向的内容赋给当前对象的*itsAge
}
~CAT()
{
delete itsAge;
}
int GetAge() const {return *itsAge;}
void setAge(int age)
{
*itsAge=age;
}
};
void main()
{
CAT fri;
cout<<"1111111 "<<fri.GetAge()<<endl;
fri.setAge(6);
CAT boot(fri);
cout<<"1111112 "<<fri.GetAge()<<endl;
cout<<"2222221 "<<boot.GetAge()<<endl;
fri.setAge(7);
cout<<"1111113 "<<fri.GetAge()<<endl;
cout<<"2222222 "<<boot.GetAge()<<endl;
}

//#include
"stdafx.h"
#include
"iostream.h"
class
CAT
{
int
*itsAge;
public:
CAT():itsAge(new
int(5)){}
//增加拷贝构造函数
CAT(CAT
&c)
{
itsAge
=
new
int(0);
*itsAge=*c.itsAge;//把c中的itsAge指针指向的内容赋给当前对象的*itsAge
}
~CAT()
{
delete
itsAge;
}
int
GetAge()
const
{return
*itsAge;}
void
setAge(int
age)
{
*itsAge=age;
}
};
void
main()
{
CAT
fri;
cout<<"1111111
"<<fri.GetAge()<<endl;
fri.setAge(6);
CAT
boot(fri);
cout<<"1111112
"<<fri.GetAge()<<endl;
cout<<"2222221
"<<boot.GetAge()<<endl;
fri.setAge(7);
cout<<"1111113
"<<fri.GetAge()<<endl;
cout<<"2222222
"<<boot.GetAge()<<endl;
}


花山区17889688756: c++中的拷贝构造函数的问题 -
线谦甘比: 拷贝构造函数多被用来实现类对象的深拷贝.例如:class A { private:char *p; public:A() { p=new char[10]; } } 不定义拷贝构造函数时,你如果对两个对象赋值,就会是浅拷贝,即:简单的成员变量相等.A a,b; a=b; 则,相当于作了a.p=b.p,a,b...

花山区17889688756: c++类的拷贝构造函数 -
线谦甘比: 拷贝构造函数必须以引用的形式传递(参数为引用值).其原因如下:当一个对象以传递值的方式传一个函数的时候,拷贝构造函数自动的被调用来生成函数中的对象.如果一个对象是被传入自己的拷贝构造函数,它的拷贝构造函数将会被调用来拷贝这个对象这样复制才可以传入它自己的拷贝构造函数,这会导致无限循环直至栈溢出(Stack Overflow).除了当对象传入函数的时候被隐式调用以外,拷贝构造函数在对象被函数返回的时候也同样的被调用.

花山区17889688756: C++复制构造函数问题 -
线谦甘比: const是可以不需要的,对于&这个,大部分的时候是要的,可以提高程序的效率,这是一个运算符,叫“引用”,拷贝构造函数也是系统自己调用的,用户是不调用的,当你在以这个类的对象为参数传递时,它不是以值来传递的,是以他自己本身来传递的,“引用”就是给那个对象取一个别名,其实就是他自己,这样的话就免去的先把值传递给一个局部的变量(这是要把这个对象中的值赋给这个变量的,也就是创立一个和本对象一模一样的另一个类对象,这就叫做拷贝,或者说是复制).对于const,这个是定义常量,是为了防止这个数据被修改而加上去的歌修饰符!很简单的,这个可以替代C里面的#define 宏定义,具有更好的安全性!要还不懂就Hi我吧!

花山区17889688756: c++中拷贝构造函数的用法? -
线谦甘比: 1.什么是拷贝构造函数: 拷贝构造函数嘛,当然就是拷贝和构造了.(其实很多名字,只要静下心来想一想,就真的是顾名思义呀)拷贝又称复制,因此拷贝构造函数又称复制构造函数.百度百科上是这样说的:拷贝构造函数,是一种特殊的构...

花山区17889688756: 一个c++关于拷贝构造函数被调用次数的问题 -
线谦甘比: 拷贝构造函数调用次数Myclass obj3(obj1); //1Myclass fun(Myclass p) //2Myclass temp(p);//3return temp;//4 这2个是普通构造函数Myclas...

花山区17889688756: c++中拷贝构造函数问题 -
线谦甘比: 这个应该是直接初始化和复制初始化.复制初始化使用=符号,而直接初始化将初始化式放在圆括号中.当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数.复制初始化首先使用指定构造函数创建一个临时对象,然后使用复制构造函数将那个临时对象复制到正在创建的对象.

花山区17889688756: C++里面的构造函数,拷贝函数,赋值函数,菜鸟求解 -
线谦甘比: 构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值.一个类也可以有多个构造函数,用来初始化不同形式的类. 拷贝函数是特殊的构造函数,用来完成对象初始化,即定义时赋值,下面程序中有详解.如果...

花山区17889688756: C++简答题 关于对拷贝构造的疑问 -
线谦甘比: 举几个例子CLASSA a2=a1; 或者CLASSA a2(a1); //定义一个对象同时用另外一个对象的值初始化它时,调用拷贝构造CLASSA f(CLASSA a); //函数调用按值传递一个类对象...

花山区17889688756: C++ 复制构造函数 报错! -
线谦甘比: 除了加默认构造函数外还有一种方法:既然你的基类有构造函数了,那么你的派生类也得加上该基类的构造函数. 这是必须的- -!将派生类的构造函数改成这样就可以了 .PenSon::PenSon(int qq):...

花山区17889688756: 一个C++关于拷贝构造函数得题目 -
线谦甘比: 在调用 fun1(a) 的时候, 传递的参数是 a 的一个复本, 而不是 a 的引用 (或者指针), 所以, 这就相当于在传递参数时, 先用 a 创建一个 A 的新实例 (就叫 b 吧), 这个时候就会调用拷贝构造函数! 关键是 "创建了一个新实例"!fun2 传递的是对象的引用, 引用指向的已经构造好的对象, 所以没有调用任何构造函数!希望说明白了, 呵呵!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网