关于C++和编译的问题
1.在类中如果定义了析构函数,编译时还会自动加上一个默认的析构函数吗,它为什么不能重载?2.拷贝构造函数A::A(A&a){numptr=newint(*a.numptr...
1.在类中如果定义了析构函数,编译时还会自动加上一个默认的析构函数吗,它为什么不能重载?
2.拷贝构造函数 A::A(A&a){numptr=new int (*a.numptr);}谁能具体解释下什么意思
3.在类的组合中,容器类不创建对象时,其内嵌对象是否会被创建,为什么?
4.类的继承中,基类的私有成员被继承后它属于派生类中public,private,protected中的哪一个,还是单独存在?
5.linux在普通用户下可以使用gedit a.cpp ,而在超级用户下却报错:No protocol specified这是怎么回事? 使用g++来编译c++文件,在普通用户下不能使用,报错:
ccache:failed to create /var/cache/ccache/tmp(permission denied),在超级用户下却可以,这又是为什么? 展开
2.拷贝构造函数 A::A(A&a){numptr=new int (*a.numptr);}谁能具体解释下什么意思
3.在类的组合中,容器类不创建对象时,其内嵌对象是否会被创建,为什么?
4.类的继承中,基类的私有成员被继承后它属于派生类中public,private,protected中的哪一个,还是单独存在?
5.linux在普通用户下可以使用gedit a.cpp ,而在超级用户下却报错:No protocol specified这是怎么回事? 使用g++来编译c++文件,在普通用户下不能使用,报错:
ccache:failed to create /var/cache/ccache/tmp(permission denied),在超级用户下却可以,这又是为什么? 展开
4个回答
展开全部
1.如果自己定义了析构函数,编译器就不会再为你提供一个默认的析构函数。另外,构造函数是可以重载的。一旦你定义了带参数的构造函数,记得在创建对象时要给对象加参数。析构函数没有参数,你想怎么重载?
2.对于A::A(A&a){numptr=new int (*a.numptr);},你给numptr在堆中开辟了一块内存,其初值为(*a.numptr)。
3.既然是组合,那么在创建对象时,容器类的对象运手也会被创建,只是大小会随着你加入的元素多少而变化的,因为你push_back()时,容器的空间是在堆中开辟的,但并不是你push一次就new一次,有相关资料你可以学一学。
4.既然基类中是私有的,无论你怎么继承,在派生类中都是私有的。在派生类中可见,但不能使贺悄橘用。
5.这个我帮不上你了,后者(g++的那个)可以肯定的是权禅团限问题,前者不清楚。
2.对于A::A(A&a){numptr=new int (*a.numptr);},你给numptr在堆中开辟了一块内存,其初值为(*a.numptr)。
3.既然是组合,那么在创建对象时,容器类的对象运手也会被创建,只是大小会随着你加入的元素多少而变化的,因为你push_back()时,容器的空间是在堆中开辟的,但并不是你push一次就new一次,有相关资料你可以学一学。
4.既然基类中是私有的,无论你怎么继承,在派生类中都是私有的。在派生类中可见,但不能使贺悄橘用。
5.这个我帮不上你了,后者(g++的那个)可以肯定的是权禅团限问题,前者不清楚。
展开全部
1.自己定义了析构函数,编译器将不再生成默认纯答析构函数;
2.这个构造函数,其实是拷贝构造函数,就是将一个A的类对象对一个新生成的对象赋值,因为是一个新对象,不能直接复制数组袜返地址,所以要重新申请空间。
3.不会啊,内部类对象在外部类声明时才会创建;
4.类的私有成员在该类被继承后,在子类中是做好慧不可见的;
5.权限问题,应该是cpp文件的权限设置吧;第二个可能是g++的安装问题
2.这个构造函数,其实是拷贝构造函数,就是将一个A的类对象对一个新生成的对象赋值,因为是一个新对象,不能直接复制数组袜返地址,所以要重新申请空间。
3.不会啊,内部类对象在外部类声明时才会创建;
4.类的私有成员在该类被继承后,在子类中是做好慧不可见的;
5.权限问题,应该是cpp文件的权限设置吧;第二个可能是g++的安装问题
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.有析构函数会遮盖默认的析构函数,不会再调用析构函数,析构函数不能衡察高重载,构造函数也不能重载,语法规则,为什么这么设计我一咐尺时也不懂。
4.基类私有成员在派生类中是private权限的
public继承 protected继承 private继承 (继承方式)
基类成员public public protected private (访问权限)
基类成员private / / / (访问没洞权限)
基类成员protected protected protected private (访问权限)
4.基类私有成员在派生类中是private权限的
public继承 protected继承 private继承 (继承方式)
基类成员public public protected private (访问权限)
基类成员private / / / (访问没洞权限)
基类成员protected protected protected private (访问权限)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C++在幕后为你写的的函数:一个拷贝构造函数,一个赋值运算符,一个析构函数,一对取址运算符。另外,如果你没有声明任何构造函数,它也橡缓将为你声明一个缺省构造函数。所有这些函数都是公有的。换句话说,如果你这么写:class Empty{}; 和你这么写是一样的:
class Empty
{
public:
Empty(); // 缺省构造函数
Empty(const Empty& rhs); // 拷贝构造函数
~Empty(); // 析构函数 Empty & operator=(const Empty& rhs); // 赋值运算符
Empty* operator&(); // 取址运算符
const Empty* operator&() const;
};
这些都是在你没有写的前提下并且有虚函数或虚继承时编译器才自动添加的。
拷贝构造函数是:用类的一个已存在的对象去初始化该类的另一个新的对象。
C++面向对象编程中一条重要的规则是:公有继承意味着“是一个”。一定要牢牢记住这条规则。
类的非虚成员函数,实际上是在说这个函数表示了一种特殊性上的不变性,子类不能改变这种“不变性”。
1.共同的基类意味着共同的特性。如果类D1和类D2都把类B声明为基类,D1和D2将从B继承共同的数据成员和/或共同的成员函数。
2.公有继承意味着“是一个”。如果类D公有继承于类B,类型D的每一个对象也是一个类型B的对象,但反烂圆过来不成立。
3.私有继承意味着“用...来实现”。如果类D私有继承于类B,类型D的对象只不过是用类型B的对象来实现而已,类型B和类型D的对象之间不存在概念上的关系。
4.分层意味着“有一个”或“用...来实现”。如果类饥如塌A包含一个类型B的数据成员,类型A的对象要么具有一个类型为B的部件,要么在实现中使用了类型B的对象。
class Empty
{
public:
Empty(); // 缺省构造函数
Empty(const Empty& rhs); // 拷贝构造函数
~Empty(); // 析构函数 Empty & operator=(const Empty& rhs); // 赋值运算符
Empty* operator&(); // 取址运算符
const Empty* operator&() const;
};
这些都是在你没有写的前提下并且有虚函数或虚继承时编译器才自动添加的。
拷贝构造函数是:用类的一个已存在的对象去初始化该类的另一个新的对象。
C++面向对象编程中一条重要的规则是:公有继承意味着“是一个”。一定要牢牢记住这条规则。
类的非虚成员函数,实际上是在说这个函数表示了一种特殊性上的不变性,子类不能改变这种“不变性”。
1.共同的基类意味着共同的特性。如果类D1和类D2都把类B声明为基类,D1和D2将从B继承共同的数据成员和/或共同的成员函数。
2.公有继承意味着“是一个”。如果类D公有继承于类B,类型D的每一个对象也是一个类型B的对象,但反烂圆过来不成立。
3.私有继承意味着“用...来实现”。如果类D私有继承于类B,类型D的对象只不过是用类型B的对象来实现而已,类型B和类型D的对象之间不存在概念上的关系。
4.分层意味着“有一个”或“用...来实现”。如果类饥如塌A包含一个类型B的数据成员,类型A的对象要么具有一个类型为B的部件,要么在实现中使用了类型B的对象。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询