返回信息流感谢各位帮楼主解答了抽象类的存在意义问题;楼主又遇到问题了,如下图:
A的构造函数为protected,B以public方式继承A,这样A的构造函数在B中应该还是protected,但为何A a;这一句会报错?
这是一条镜像帖。来源:北邮人论坛 / cpp / #82994同步于 2014/10/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
保护构造函数
wabyrlt
2014/10/2镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
借楼问一下
下面这样构造对象b时为啥就能调用A的构造函数呢?
class A
{
protected:
A(){}
};
class B : public A
{
};
int main()
{
B b;
system("pause");
return 0;
}
【 在 gaoweiwei 的大作中提到: 】
: a的构造函数是保护的当然就报错了
B类可以访问父类的protect成员,你把父类的构造写成private就不可以访问
【 在 wabyrlt () 的大作中提到: 】
: 感谢各位帮楼主解答了抽象类的存在意义问题;楼主又遇到问题了,如下图:
: [upload=1][/upload]
: A的构造函数为protected,B以public方式继承A,这样A的构造函数在B中应该还是protected,但为何A a;这一句会报错?
: ...................
通过『我邮2.0』发布
【 在 xiaobing307 的大作中提到: 】
: 借楼问一下
: 下面这样构造对象b时为啥就能调用A的构造函数呢?
: class A
: ...................
构造b是会先调用A的构造函数,由于A的构造函数是保护构造函数,B是A的子类,所以可以调用;
原帖中B的构造函数中要构造A类对象,相当于从外部访问A的构造函数,所以不行
后面那句话是不对的,比如说拷贝构造函数里,当前类的对象就可以访问非public成员
#include <iostream>
using std::cout;
using std::endl;
class A
{
public:
A(){}
A(int a)
{ this->a = a;}
A(const A& b)
{ a = b.a;} // 可以访问private成员
int get()
{ return a;}
private:
int a;
};
int main()
{
A a(2);
A b = a;
cout << a.get() << endl;
cout << b.get() << endl;
return 0;
}
【 在 renwotao 的大作中提到: 】
: 注意是类之间的访问,对象是只能访问public成员
: 通过『我邮2.0』发布
不是说“拷贝构造函数也是构造函数”吗,那在拷贝构造函数中访问b对象的私有成员,属于类的成员函数访问私有成员,而不是类对象访问私有成员吧?
对象,是不能访问私有数据的。
【 在 xiaobing307 的大作中提到: 】
: 后面那句话是不对的,比如说拷贝构造函数里,当前类的对象就可以访问非public成员
: #include <iostream>
: using std::cout;
: ...................
http://stackoverflow.com/questions/4117002/why-can-i-access-private-variables-in-the-copy-constructor
【 在 t330 的大作中提到: 】
: 不是说“拷贝构造函数也是构造函数”吗,那在拷贝构造函数中访问b对象的私有成员,属于类的成员函数访问私有成员,而不是类对象访问私有成员吧?
: 对象,是不能访问私有数据的。
: