c++

protected 和 private修饰的构造函数:

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

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

#include <iostream>
using namespace std; ////////////////////////////////////////////////
class A {
public:
A();
protected:
A(int x);
private:
A(int x, int y);
};
A::A() {
cout<<"A::A() public"<<endl;
}
A::A(int x) {
cout<<"A(int x) protected"<<endl;
}
A::A(int x, int y) {
cout<<"A(int x,int y) private"<<endl;
}
////////////////////////////////////////////////
class B:public A {
public:
B();
B(int x);
//B(int x , int y);
void show();
};
B::B(): A() {//public A() }
B::B(int x): A(x) {//子类中的构造函数可调用父类的protected构造函数 } //当子类中的构造函数调用父类的private构造函数时会错
// error C2248: “A::A”: 无法访问 private 成员(在“A”类中声明)
// B::B(int x, int y): A(x,y){
//
// } ////////////////////////////////////////////////
void f1()
{
A a1; // A::A() public
// A a2(1); //error:在类的外部创建对象时,不能调用protected或private修饰的构造函数。
// A a3(1,2); //error:在类的外部创建对象时,不能调用protected或private修饰的构造函数。
B b1(); // A(int x) protected
} int main()
{
f1(); while();
return ;
}

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

两种方法:

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

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

#include <iostream>
using namespace std;
#include <string> //友元创建:
class pri_class
{
friend class pub_class;
private:
pri_class();
};
pri_class::pri_class()
{
cout<<"a new pri_class is created"<<endl;
}
class pub_class
{
public:
pri_class* create_pri_class()
{
return new pri_class;
}
}; //static 创建:
class pri_class_2
{
public:
static pri_class_2* NewInstance(string h );
pri_class_2();
private:
pri_class_2(string h);
}; pri_class_2::pri_class_2()
{
cout<<"a new pri_class_2 is created"<<endl;
} pri_class_2* pri_class_2::NewInstance(string h)
{
cout<<h<<"I am going to create a new pri_class_2!" <<endl;
return new pri_class_2;
} //----------------------------------------------------------------------
void func(void)
{
pub_class fire;
pri_class *pri_ptr = fire.create_pri_class();//a new pri_class is created pri_class_2 pri2;//a new pri_class_2 is created
string str("coco");
pri2.NewInstance(str); //coco ,I am going to create a new pri_class_2!   //a new pri_class_2 is created
}
int main()
{
func(); while();
return ;
}
 

补充:

构造函数定义为private,protected http://www.cnblogs.com/this-543273659/archive/2011/08/02/2125487.html

c++ ,protected 和 private修饰的构造函数的更多相关文章

  1. Java学习笔记(4)----Public,Protected,Package,Private修饰符可见性

    Java修饰符类型(public,protected,private,friendly) public的类.类属变量及方法,包内及包外的任何类均可以访问:protected的类.类属变量及方法,包内的 ...

  2. Java访问权限修饰符public protected friendly private用法总结(转载好文Mark)

    首先声明:Java中,friendly这个修饰符并没有显式的声明,在成员变量和方法前什么修饰符也不用,默认的就是friendly.为了条理清晰,分三种不同情况来总结. 一 访问权限修饰符修饰成员变量和 ...

  3. java 修饰符的作用一(public protected default private 组)

    1.public protected default private 组 public 权限最大,同类,同包,不同包,同包子类父类之间,不同包子类父类之间都可以访问. java 默认的权限是defau ...

  4. java四种权限修饰符(public > protected > (default) > private)

    权限修饰符在哪里可以访问 (default) : 表示什么权限修饰符都不写 位置 public protected (default) private 同一个类 yes yes yes yes 同一个 ...

  5. 【java基础】(1)Java的权限修饰符(public,protected,default,private)

    访问权限修饰符权限从高到低排列是public  ,protected  ,default, private. 一.根据“是否是同包”.“是否是子类”分为4中情况+本类 5种情况 二.把 同包中的子类 ...

  6. private/默认/protected/public权限修饰符的区别

    private/默认/protected/public权限修饰符和面向对象的三大特性的封装性有着密切关系.它们都可以修饰类的成员,其中的默认和public还可以修饰类. 类的成员包括:成员变量.成员方 ...

  7. Java/C++之 public、protected、private ; virtual & abstract

    一.绪 Java/C++都是面向对象的第三代计算机高级编程语言,其本质雷同,而语法确有差异,稍不注意容易引起混淆.本文总结了一些这两门语言的差异之处,仅供参考. 二.C++ 对于C++这门语言,就其类 ...

  8. 对c++ public、protected、private关键字的理解

    首先要明确一下: 1.这三个关键字在两种地方会用到,一个是对类的成员变量和成员函数修饰时(比如私有的成员变量,受保护的成员变量·,公有的函数),还有一种是对继承方式的修饰(比如公有继承,保护继承). ...

  9. 【PHP面向对象(OOP)编程入门教程】13.访问类型(public,protected,private)

    类型的访问修饰符允许开发人员对类成员的访问进行限制,这是PHP5的新特性,但却是OOP语言的一个好的特性.而且大多数OOP语言都已支持此特性.PHP5支持如下3种访问修饰符: public (公有的. ...

随机推荐

  1. BZOJ 2424: [HAOI2010]订货(最小费用最大流)

    最小费用最大流..乱搞即可 ------------------------------------------------------------------------------ #includ ...

  2. 获取json格式字符串的简单方法

    有的时候需要找一些Json格式的字符串,可以打开任意一个网页进入到调试模式,然后看network相关的访问信息,就可以获取到. 比如: 在记笔记的时候,点击保存后,会发出一些请求,然后有相应的相应,任 ...

  3. linux历史发展

    1.什么是开源? 开源就是软件和源代码都是公开的. 可以修改(完善作者的代码)和创建自己的软件. 2.免费软件不同于自由软件,虽然它是免费的,但他不公布源代码,共享软件与免费软件有点类似,其初起是不收 ...

  4. 转: 深入理解 AngularJS 的 Scope

      查看 DEMO.参考 StackOverflow. ng-switch ng-switch 的原型继承和 ng-include 一样.所以如果你需要对基本类型数据进行双向绑定,使用 $parent ...

  5. Spring Boot简介

    Spring Boot简介 Spring Boot是为了简化Spring开发而生,从Spring 3.x开始,Spring社区的发展方向就是弱化xml配置文件而加大注解的戏份.最近召开的SpringO ...

  6. 权限控制框架Spring Security 和Shiro 的总结

    关于权限控制,一开始感觉比较难,后来先是接触了Spring Security 学起来也比较吃力,再是学习了Shiro,感觉简单很多. 总体来说这些框架,主要做了两个事情 Authentication: ...

  7. python利用utf-8编码判断中文英文字符(转)

    下面这个小工具包含了判断unicode是否是汉字.数字.英文或者其他字符,全角符号转半角符号,unicode字符串归一化等工作. #!/usr/bin/env python # -*- coding: ...

  8. projecteuler----&gt;problem=8----Largest product in a series

    title: The four adjacent digits in the 1000-digit number that have the greatest product are 9 9 8 9 ...

  9. 【剑指offer】面试题43:n个骰子的点数

    第一种思路是,每一个骰子的点数从最小到最大,如果为1-6,那么全部的骰子从最小1開始,我们如果一种从左向右的排列,右边的最低,索引从最低開始,推断和的情况. def setTo1(dices, sta ...

  10. 简单的前端js+ajax 购物车框架(入门篇)

    其实,一直想把自己写的一些js给总结下,也许是能力有限不能把它完美结合起来.只能自己默默的看着哪些代码,无能为力. 今天在公司实在没有事做,突然就想到写下商城的购物车的前端框架,当然我这里只有购物车的 ...