c++ ,protected 和 private修饰的构造函数
2014-11-13 17:24
197 查看
c++
protected和private修饰的构造函数:
1.在类的外部创建对象时,不能调用protected或private修饰的构造函数。
2.当子类中的构造函数调用父类的private构造函数时会错,当子类中的构造函数调用父类中的public或protected构造函数时是对的。
那么,private构造函数怎么才能被用到呢?
两种方法:
1、使用友元类的对象中的方法来创建它。
2、在本类中实现static方法来创建它。
补充:
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
相关文章推荐
- C++ 中将构造函数,析构函数声明为private,protected
- C++ 中将构造函数,析构函数声明为private,protected
- C/C++基础之:类成员变量的修饰public/private/protected的区别
- C++构造函数public,protected,private
- C++ 中将构造函数,析构函数声明为private,protected
- C++之public、private、protected(二)构造函数定义private或protected好处详解
- public,private,protected和无修饰时的区别
- 深入浅出C++之private/public/protected
- [转]深入浅出C++之private/public/protected
- 深入浅出C++之private/public/protected
- 深入浅出C++之private/public/protected
- public、protected、private在C++和Java中的应用及区别
- c++对象类型笔记:private,protected,public
- C++ 类访问控制(public/protected/private)
- C++中public,protected,private继承的语意
- C++中public,protected,private继承的语意
- C++中 public,protected, private 访问标号小结
- C++中 public,protected, private 访问标号小结
- Types of C++ Inheritance: public protected private
- 深入浅出C++之private/public/protected