精华内容
下载资源
问答
  • 翻了好多地方,有人说成员前面加this->可以解决,果然可以,但一直不明白原因, 代码: #include #include #include #include #include using namespace std; template class b { public:...
    翻了好多地方,有人说在成员前面加this->可以解决,果然可以,但一直不明白原因,
    代码:
    #include <iostream>
    #include <map>
    #include <string>
    #include <deque>
    #include <vector>

    using namespace std;

    template <class T>
    class b {
    public:
    b(){}
    b(T i){
    x.push_back(i);
    }
    void print(){
    if(x.size()>0)
    cout<<x[0]<<endl;
    }
    protected:
    vector<T> x;
    };

    template <class T>
    class e: public b<T>{
    public:
    e(T i):b<T>(i){
    }
    void print(){
    if(this->x.size()>0)//这里要加this->或者b<T>::
    cout<<this->x[0]<<endl;
    }
    };
    int main()
    {
    e<int> a(1);
    a.print();
    }
    在http://forum.ubuntu.org.cn/viewtopic.php?t=240044上有人解释了说是编译器偷懒的原因
    展开全文
  • #include<... protected: double x,y;//分别表示长方形长和宽。 public: KB(double x1,double y1) { x=x1; y=y1; } virtual double area()//虚函数,计算长方形面积,计算公式...
    #include<iostream>
    using namespace std;
    class KB
    {
    	protected:
    		double x,y;//分别表示长方形的长和宽。
    	public:
    		KB(double x1,double y1)
    		{
    			x=x1;
    			y=y1;
    		}
    		virtual double area()//虚函数,计算长方形的面积,计算公式:面积=长X宽。
    		{
    			return x*y;
    		}
    		double peri()// 计算长方形的周长。计算公式:周长=2X长+2X宽。
    		{
    			double p=2*(x+y);
    			return  p;
    		}
    		virtual int iSqure()//虛函数,判断是否为正方形,如是,返回1;否则返回0。
    		{
    			if(x==y)
    			return 1;
    			else
    			return 0;
    		}
    };
    class KB2:public KB
    {
    	double height;//表示长方体的高度。
    	public:
    		KB2(double x1,double y1,double h):KB(x1,y1)
    		{
    			height=h;
    		}
    		double volume()//计算长方体的体积。计算公式:体积=底面积X高
    		{
    			double v;
    			v=KB::area()*height;
    			return v;
    		}
    		double area()//计算长方体的表面积。计算公式:表面积=2X底面积+底面周长X高度
    		{
    			double aa;
    			aa=2*KB::area() +KB::peri() *height;
    			return aa;
    		}
    		int iSquare0()//判断是否为正方体,如是,返回l,否则返回0。
        {
        	if(KB::iSqure()&&height==x)
        	return 1;
        	else
        	return 0;
    	}
    		
    };
    int main()
    {
    	KB *re;//基类的指针 
    	KB2 cu(2,2,2);//派生类的对象 
    	re=&cu;//基类的指针指向派生类的对象 
    	cout<<"长方体的体积是:"<<cu.volume() <<endl;//派生类的对象调用派生类的成员函数 
    	cout<<"长方体的表面积是:"<<re->area()<<endl;
    	if(re->iSqure())
    	cout<<"这个长方体是正方体"<<endl;
    	else
    	cout<<"这个长方体不是正方体"<<endl;
    }
    
    
    展开全文
  • 《c++primer第四版中文》中p579,对“派生类到基类转换可访问性”讲比较模糊,于是用visual studio 2008花了四个小时把大部分能想到情况都试验了一下,得出如下结果。 这里后代类指是由基类派生派生...

    在《c++primer第四版中文》中p579,对“派生类到基类转换的可访问性”讲的比较模糊,于是用visual studio 2008花了四个小时把大部分能想到的情况都试验了一下,得出如下结果。
    这里的后代类指的是由基类派生的派生类派生出来的类。也就是类层次中的第三层。

    当为public派生时:
     派生类定义体中:
      构造函数中:
       构造函数体中不能定义派生类对象(虽然能通过编译,但运行中会出现错误),但可以定义基类对象、指针和引用。
       可以定义派生类和基类的指针及引用。既然不能定义派生类对象,就无法初始化引用(引用必须在定义时初始化),也就无法让派生类的引用对基类引用初始化或赋值了。并且,派生类的指针也不能初始化,只能赋空值,这样派生类的指针就可以对基类指针初始化或赋值。但这么做似乎没有什么意义。
      复制控制成员:
       复制函数:
        可以定义派生类和基类的对象、指针、引用。
        除了派生类复制函数的功能不能使用外(即不能用派生类对象对派生类对象进行初始化),其它和用户代码中一样。
       赋值函数:
        可以定义派生类和基类的对象、指针、引用。
        除了派生类赋值函数的功能不能使用外(即不能用派生类对象对派生类对象进行赋值),其它和用户代码中一样。
       析构函数:
        构造函数体中不能定义派生类对象(虽然能通过编译,但运行中会出现错误),但可以定义基类对象。
      其它函数体中:
       可以定义派生类和基类的对象、指针、引用。
       情况和在派生类用户代码中一样。
      其它位置:
       只能定义派生类指针,能定义基类对象、指针和引用。
     后代类定义体中:
      所有成员函数中:
       可以定义派生类和基类的对象、指针、引用。
       情况和在派生类用户代码中一样。
      其它位置:
       可以定义派生类和基类的对象、指针、引用。
      后代类的用户代码:
       后代类对象可以对基类对象进行初始化和赋值;
       后代类对象的地址可以对基类的指针进行初始化和赋值;
       后代类的对象和引用可以对基类的引用进行初始化和赋值;
     派生类用户代码中:
      派生类对象可以对基类对象进行初始化和赋值;
      派生类对象的地址可以对基类的指针进行初始化和赋值;
      派生类的对象和引用可以对基类的引用进行初始化和赋值;

    当为protected派生时:
     派生类定义体中:
      由于派生列表中的访问标号只对用户代码和后代派生类有影响,对派生类访问基类成员没有影响,所以,此处情况应该同上。
     后代类定义体中:
      派生类可以转换为基类;
      后代类可以转换为基类(注意:在构造函数和复制控制成员中的限制和派生类中一样);
     派生类用户代码中:
      派生类无法转换为基类;
      后代类无法转换为基类;

    当为private派生时:
     派生类定义体中:
      由于派生列表中的访问标号只对用户代码和后代派生类有影响,对派生类访问基类成员没有影响,所以,此处情况应该同上。
     后代类定义体中:
      派生类无法转换为基类;
      后代类无法转换为基类;
     用户代码中:
      派生类无法转换为基类;
      后代类无法转换为基类;

    下面是用来做试验的类层次,只举出几个例子。实际在试验过程中,每次只试验一种情况,试验完毕马上擦掉,以免影响接下来的试验结果。
      class A
      {
      public:
       A(const int &ru = 0)
        : base(ru) {}
       A(const A &pp)
        : base(pp.base) { A w; A s(w); } //试验复制控制函数里的情况,就是在这里面加定义和转换代码,这个
       virtual ~A() {}    //示例在用户使用此函数时会出错。例在main()中执行 A a; A b(a)。
      private:
       int base;
      protected:
      };

      class B :private A
      {
      public:
       B(const int &ru = 0, const int &ru2 = 0)
        : A(ru), bulk(ru2) { B a; } //试验构造函数里的情况,在这里加代码。这个示例,当用户在main()中定义B a;时就会出错。
       ~B() { B b; } //试验析构函数里的情况,在这里加代码。这个示例,在发生此类型的析构时就会出错。
      private:
       int bulk;
      protected:
      };

      class C : public B
      {
      public:
       C(const int &ru = 0, const int &ru2 = 0, const int &ru3 = 0)
        : B(ru, ru2), bulk2(ru3) {}
       void uuuu() { A a; B b; C c; a = b; a = c; } //试验其它函数里面的情况,在这里面加定义的转换代码,此示例可行,不会出现错误。
       ~C() {}
      private:
       int bulk2;
      protected:
      };


    总结:在可以访问到基类public成员的地方,可以进行派生类到基类的转换。
    在用visual studio 2008试验上述规则时,发现在类定义体中,构造函数里面不能定义本身类的对象,否则在用户代码中使用时,运行会出现错误;析构函数里面也不能定义本身类对象,运行时会出现错误;在复制函数里可以定义本身类对象,在这个函数内部不能使用本身的复制功能,否则运行时同样会出错;在赋值函数里也可以定义本身类对象,在这个函数里面也不能使用本身类的赋值功能,否则还是会出错;
    在其它成员函数里面可以定义本身类的对象,也能使用复制控制功能。
    在类定义体内,不属于成员函数的范围,只能定义本身类的指针或引用。

    展开全文
  • Private私有派生或Protected保护派生时,如何让基类方法派生类外面可用 方法1:定义一个使用该基类方法派生类方法 Student:private valarray Student类想使用valarray类sum()方法 则可以: double ...

    Private私有派生或Protected保护派生时,如何让基类方法在派生类外面可用

    方法1:定义一个使用该基类方法的派生类方法

    Student:private valarray<double>

    Student类想使用valarray<double>类的sum()方法

    则可以:

    double Student::sum()const

    {

      return valarray<double>::sum();

    }

    如果定义了一个Student对象student,则可以使用student.sum()方法


    方法2:将函数调用包含在另一个函数调用中,使用using声明

    Student:private valarray<double>

    {

       public:

         using valarray<double>::max;

    }

    则可以达到同样的效果


    展开全文
  • protected $table; protected $index_field; private $data; function __construct($id) { //MySQL SELECT and assign resource to data } function __destruct() { //MySQL UPDATE } public function...
  • 但是能不能访问基类成员还与父类成员属性(public、protected、private)以及继承方式有关③类静态成员:如果基类定义了一个静态成员,那么该静态成员整个继承体系中都存在。该静态成员只能定义一次,派生类不能...
  • 派生类的定义class 派生类名:继承方式 基类名1,继承方式 基类名2 { 派生类成员声明 }多继承和单继承UML表示访问控制基类的成员可以有public(公有)、protected(保护)和private(私有)三种访问属性。基类的...
  • 1、像其他类一样,基类或派生类可以使其他类或函数成为友元,友元可以访问类private,protected成员; 2、友元关系不能继承。基类的友元对派生类成员没有特殊访问权限,如果基类被授予友元关系,则只有基类具有...
  • 继承和派生01 继承和派生概念继承: 在定义一个新类 B 时,如果该类与某个已有类 A 相似(指是 B 拥有 A 全部特点),那么就可以把 A 作为一个基类,而把B作为基类的一个派生类(也称子类)。派生类: ...
  • 1. 基类private成员在派生类中无论以什么方式继承都是不可见。这里不可见是指基类私有成员还是 被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能...访问方式 == Min(成员在基类.
  • public class BasePage:Page protected override void OnPreLoad(EventArgs e){ base.OnPreLoad(e); .................. ...这样就可以在基类页面统一做一些判断了 转载于:https://www.cnblogs.com/maijin/p/...
  • 看代码过程中,有时会发现析构函数被定义成virtual,有一些没有定义成virtual但被放置于protected下。网上搜了下了解了原因,下面是较好解答: 1) ...1、如果一个类被继承,同时定义基类以外成员对象...
  • 基类修饰符,其实就是C#里那几种修饰符,public ,proteced,internal,privat这四种基础类型,当然也还一个组合类型internal protected,它们都是C#里最基础东西,今天觉得有必要再说一下。 我还是觉得单讲...
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 封装长方体 {  class Rectangle ... protected double wi
  • 继承机制是面向对象程序设计使代码可以复用最重要手段,它允许程序员保持原有类特性基础上进行扩展,增加功能,这样产生类称为派生类。继承呈现了面向对象程序设计层析结构,体现了由简单到复杂认知...
  • 因为工作需要商业服务基类中包含某些安全验证策略,所以定义了一个protected virtual void Validate(){}这样方法,但是还有某些派生类是不需要安全验证,我就派生类中重写了基类的方法,但是什么事情都不...
  • 在基类中声明可以从派生类引发事件标准方法。此模式广泛应用于.Net Framework类库中Windows窗体类。 我们来看一个Button类的定义 public class Button : ButtonBase, IButtonControl { protected ...
  • C++ 设计抽象基类的策略

    千次阅读 2014-03-05 14:58:49
    (2)将这些函数作为基类的虚函数(或纯虚函数),它们定义了一个  统一公共接口。 (3)由该类基类派生出若干子类,各子类中实现这些虚函数。 #include using namespace std; class Container //抽象类 { ...
  • C++-继承:基类与派生类关系

    千次阅读 2017-02-23 18:29:09
    成员函数定义和名字隐藏基类的数据成员和成员函数派生类中都有一份拷贝,派生类能够直接访问从基类继承而来public和protected成员,且只能够通过这两类成员访问从基类继承而来private成员。派生类不仅可以...
  • 新出现知识点有虚函数,protected关键字,动态绑定.[练习]:定义Quote类,保存书信息.作为一个基类,后续将会定义其他派生类(保存打折书籍信息),以及一个打印书信息函数(通过动态绑定来判断调用那种类函数)....
  • 继承和派生 继承:在定义一个新类B时,如果该类与某个已有类A相似(指是B拥有A全部特点), 那么就可以把A作为一个基类,而把B...派生类拥有基类的全部成员函数和成员变量,不论是private、protected、pu...
  • 定义几何图形类Shape作为基类,并Shape基础上派生出圆形Circle类和矩形Rectangle类,两个派生类都有CalculateArea()函数计算几何图形面积。 #include<iostream> using namespace std; #define PI 3....
  • 继承机制是面向对象程序设计使代码可以复用最重要手段,它允许程序员保持原有类特性基础上进行扩展,增加功能,这样产生新类,称派生类。继承呈现了面向对象程序设计层次结构,体现了由简单到复杂认知...
  • 基类和派生类

    2019-01-13 15:33:41
    定义一个“点”类Dot,包含数据成员x,y(坐标点),平面上两点连成一条直线,定义一个直线类Line,求直线长度和直线中点坐标, 数据自拟。 (提示:直线类继承Dot类,同时以Dot类作为其子对象) 这道题目写时候...
  • C++ 派生类和基类

    2019-05-07 10:58:17
    基类的构造函数和析构函数不能被继承,派生类中,如果对派生类新增成员进行初始化,需要加入派生类构造函数 下面定义了一个基类 base_class1 和一个派生类 deived_class #pragma once #include <iostream&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 513
精华内容 205
关键字:

在基类定义的protected