您的位置:首页 > 编程语言 > C语言/C++

c++ ,protected 和 private修饰的构造函数

2014-11-13 17:24 197 查看
c++

protected和private修饰的构造函数:

1.在类的外部创建对象时,不能调用protected或private修饰的构造函数。

2.当子类中的构造函数调用父类的private构造函数时会错,当子类中的构造函数调用父类中的public或protected构造函数时是对的。

#include<iostream>
usingnamespacestd;

////////////////////////////////////////////////
classA{
public:
A();
protected:
A(intx);
private:
A(intx,inty);
};
A::A(){
cout<<"A::A()public"<<endl;
}
A::A(intx){
cout<<"A(intx)protected"<<endl;
}
A::A(intx,inty){
cout<<"A(intx,inty)private"<<endl;
}
////////////////////////////////////////////////
classB:publicA{
public:
B();
B(intx);
//B(intx,inty);
voidshow();
};
B::B():A(){//publicA()

}
B::B(intx):A(x){//子类中的构造函数可调用父类的protected构造函数

}

//当子类中的构造函数调用父类的private构造函数时会错
//errorC2248:“A::A”:无法访问private成员(在“A”类中声明)
//B::B(intx,inty):A(x,y){
//
//}

////////////////////////////////////////////////
voidf1()
{
Aa1;//A::A()public
//Aa2(1);//error:在类的外部创建对象时,不能调用protected或private修饰的构造函数。
//Aa3(1,2);//error:在类的外部创建对象时,不能调用protected或private修饰的构造函数。
Bb1(33);//A(intx)protected
}

intmain()
{
f1();

while(1);
return0;
}


那么,private构造函数怎么才能被用到呢?

两种方法:

1、使用友元类的对象中的方法来创建它。

2、在本类中实现static方法来创建它。

#include<iostream>
usingnamespacestd;
#include<string>

//友元创建:
classpri_class
{
friendclasspub_class;
private:
pri_class();
};
pri_class::pri_class()
{
cout<<"anewpri_classiscreated"<<endl;
}

classpub_class
{
public:
pri_class*create_pri_class()
{
returnnewpri_class;
}
};

//static创建:
classpri_class_2
{
public:
staticpri_class_2*NewInstance(stringh);
pri_class_2();
private:
pri_class_2(stringh);
};

pri_class_2::pri_class_2()
{
cout<<"anewpri_class_2iscreated"<<endl;
}

pri_class_2*pri_class_2::NewInstance(stringh)
{
cout<<h<<"Iamgoingtocreateanewpri_class_2!"<<endl;
returnnewpri_class_2;
}

//----------------------------------------------------------------------
voidfunc(void)
{
pub_classfire;
pri_class*pri_ptr=fire.create_pri_class();//anewpri_classiscreated

pri_class_2pri2;//anewpri_class_2iscreated
stringstr("coco");
pri2.NewInstance(str);//coco,Iamgoingtocreateanewpri_class_2!//anewpri_class_2iscreated

}
intmain()
{
func();

while(1);
return0;
}



补充:

构造函数定义为private,protected/article/4900940.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: