1,二义性的介绍

如果文法G中的某个句子存在不只一棵语法树,则称该句子是二义性的。如果文法含有二义性的句子,则称该文法是二义性的。

二义性的介绍

2,第二义和第三四义是什么

第一义是涅槃寂静 第二义是诸法无我第三义是诸行无常第N义详见大藏经或百度
第一义不是第一个念头,而是能成为位列第一的反应。下面不清楚。搞清逻辑啊礼貌啊等等。

第二义和第三四义是什么

3,两个义有何不同

桃园三结义中,结义的意思是指朋友结为异姓兄弟,义就是一种拜认的亲属关系。 聚义的意思是为正义事业而聚集在一起,那么聚义厅中的义就是指正义、公正的道理的意思。
桃园三结义指的兄弟之义 聚义厅的本来也是指的兄弟之义,但后来被宋江定义为所谓“忠义”了。忠前义后

两个义有何不同

4,和合的二义是甚么

"和合" 具有二义,即理和与事和 : 一.理和 : 理和是证择灭,就是僧众一同修证此共同选择的寂灭之道理. 二.事和 : 事和共有六项,即所谓六和敬. 1.身和同住:就是身体和平共处。 2.口和无诤:就是言语不起争论。 3.意相同悦:就是心意共同欣悦。 4.戒和同修:就是戒律共同遵守。 5.见和同解:就是见解完全一致。 6.利和同均:就是利益一体均沾。 基本上.这是针对出家僧众所持的原则. 僧是和合的意义.是大圣佛陀时代的僧众制度,在于保障整体僧团的和乐无诤,以达到平等解脱之涅槃彼岸为正宗,固然佛陀三千年前亲自所制定的规则,这六项真理是不变的、永恒的,是涅槃必经之道。 佛门僧团应恪守六和敬,以圆成佛陀理性之教团,若如是依教奉行,诸佛赞叹,

5,存在二义性怎么解决

程序代码如下02 Microsoft.Office.Interop.Excel.Worksheet worksheet;02 workbook = excel.Workbooks.Add(Missing.Value);02 worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value);02 worksheet.Name = "文件1";02 worksheet.Activate();会出现提示:警告 1 方法“Microsoft.Office.Interop.Excel._Worksheet.Activate()”和非方法“Microsoft.Office.Interop.Excel.DocEvents_Event.Activate”之间存在二义性。将使用方法组。
有两个解决二义性的基本方法。1. 方法一:设置一个规则,该规则可在每个二义性情况下指出哪一个分析树(或语法树)是正确的。这样的规则称作消除二义性规则(disambiguating rule)。这样的规则的用处在于:它无需修改文法(可能会很复杂)就可消除二义性。2. 方法二:这种方法是将文法改变成一个强制正确分析树的构造的格式,这样就可以解决二义性了。当然在这两种办法中,都必须确定在二义性情况下哪一个树是正确的。这就再一次涉及到语法制导翻译原则了。所需的分析(或语法)树应能够正确地反映将来应用到构造的意义,以便将其翻译成目标代码。 如果文法g中的某个句子存在不只一棵语法树,则称该句子是二义性的。如果文法含有二义性的句子,则称该文法是二义性的。

6,派生类的二义性

实例多重继承使得从不同的路径继承成员名称成为可能。沿着这些路径的成员名称并不必然是唯一的。这些名称的冲突称为“二义性”。任何引用类成员的表达式必须使用一个无二义性的引用。下面的例子显示了二义性是如何发生的。//说明两个基类A和Bclass Apublic:unsigned a;unsigned b();};class Bpublic:unsigned a(); //注意类A也有一个成员a和一个成员bint b();char c;};//定义从类A和类B中派生出的类Cclass C : public A,public B};分析按上面所给出的类说明,如下的代码就会引出二义性,因为不清楚是引用类A的b呢,还是引用类B的b:C *pc=new C;pc->b();考虑一下上面的代码,因为名称a既是类A又是类B的成员,因而编译器并不能区分到底调用哪一个a所指明的函数。访问一个成员,如果它能代表多个函数、对象、类型或枚举则会引起二义性。编译器通过下面的顺序执行以检测出二义性:⒈ 如果访问的名称是有二义性的(如前述),则产生一条错误信息。⒉ 如果重载函数是无二义性的,它们就没有什么问题了⒊ 如果访问的名称破坏了成员访问许可,则产生一条错误信息在一个表达式产生了一个通过继承产生的二义性时,通过用类名称限制发生问题的名称即可人工解决二义性,要使前面的代码以无二义性地正确编译,要按如下使用代码:C *pc = new C;pc->B::a();注意:在类C说明之后,在C的范围中引用B就会潜在地引起错误。但是,直到在C的范围中实际使用了一个对B的无限定性的引用,才会产生错误。二义性和虚拟基类如果使用了虚拟基类、函数、对象、类型以及枚举可以通过多重继承的路径到达,但因为只有一个虚拟基类的实例,因而访问这些名称时,不会引起二义性。访问任何类A的成员,通过非虚拟基类访问则会引起二义性;因为编译器没有任何信息以解释是使用同类B联系在一起的子对象,还是使用同类C联系在一起的子对象,然而当A说明为虚拟基类时,则对于访问哪一个子对象不存在问题了。通过继承图可能有多个名称(函数的、对象的、枚举的)可以达到。这种情况视为非虚拟基类引起的二义性。但虚拟基类也可以引起二义性,除非一个名称“支配”(dominate)了其它的名称。一个名称支配其它的名称发生在该名称定义在两个类中,其中一个是由另一个派生的,占支配地位的名称是派生类中的名称,在此名称被使用的时候,相反不会产生二义性,如下面的代码所示:class Apublic:int a;};class B: public virtual Apublic:int a();};class C: public virtual A...};class D: public B,public Cpublic:D() };转换的二义性显式地或隐含地对指向类类型的指针或引用的转换也可引起二义性。实例1虚拟函数可以确保在一个对象中调用正确的函数,而不管用于调用函数的表达式。假设一个基类含有一个说明为虚拟函数同时一个派生类定义了同名的函数。派生类中的函数是由派生类中的对象调用的,甚至它可以用指向基类的指针和引用来调用。下面的例子显示了一个基类提供了一个PrintBalance函数的实现:class Accountpublic:Account(double d); //构造函数virtual double GetBalance(); //获得平衡virtual void PrintBalance(); //缺省实现private:double _balance;};//构造函数Account的实现double Account::Account(double d)_balance=d;}//Account的GetBalance的实现double Account::GetBalance()return _balance;}//PrintBalance的缺省实现void Account::PrintBalance()cerr<<Error.Balance not available for base type.<<endl;}两个派生类CheckingAccount和SavingsAccount按如下方式创建:class CheckingAccount:public Accountpublic:voidPrintBalance();};//CheckingAccount的PrintBalance的实0现void CheckingAccount::PrintBalance()cout<<Checking account balance:<< GetBalance();}class SavingsAccount:public Accountpublic:void PrintBalance();};//SavingsAccount中的PrintBalance的实现void SavingsAccout::PrintBalance()cout<<Savings account balance:<< GetBalance();}函数PrintBalance在派生类中是虚拟的,因为在基类Account中它是说明为虚拟的,要调用如PrintBalance的虚拟函数,可以使用如下的代码://创建类型CheckingAccount和SavingsAccount的对象SavingsAccount *pSavings=new SavingsAccount(1000.00);//用指向Account的指针调用PrintBalanceAccount *pAccount=pChecking;pAccount->PrintBalance();//使用指向Account的指针调用PrintBalancepAccount=pSavings;pAccount->PrintBalance();分析1在前面的代码中,除了pAccount所指的对象不同,调用PrintBalance的代码是相同的。因为PrintBalance是虚拟的,将会调用为每个对象所定义的函数版本,在派生类CheckingAccount和SavingsAccount中的函数“覆盖”了基类中的同名函数。如果一个类的说明中没有提供一个对PrintBalance的覆盖的实现,则将采用基类Account中的缺省实现。实例2派生类中的函数重载基类中的虚拟函数,仅在它们的类型完全相同时才如此。派生类中的函数不能仅在返回值上同基类中的虚拟函数不同;参量表也必须不同。当指针或引用调用函数时,要遵循如下规则:* 对虚拟函数调用的解释取决于调用它们的对象所基于的类型。* 对非虚函数调用的解释取决于调用它们的指针或引用的类型。下面例子显示了在使用指针调用虚拟或非虚拟函数时它们的行为:#include//说明一个基类class Basepublic:virtual void NameOf(); //虚拟函数void InvokingClass(); //非虚拟函数};//两个函数的实现void Base::NameOf()cout<<Base::NameOf\n;}void Base::InvokingClass()cout<<Invoked by Base\n;}//说明一个派生类class Derived:public Basepublic:void NameOf(); //虚拟函数void InvokingClass(); //非虚拟函数};//两个函数的实现void Derived::NameOf()cout<<Derived::NameOf\n;}void Derived::InvokingClass()cout<<Invoked by Derived\n;}void main()//说明一个Derived类型的对象Derived aDerived;//说明两个指针,一个是Derived*型的,另一个是Base*型的,并用 //aDerived初始化它们。Derived *pDerived=&aDerived;Base *pBase =&aDerived;//调用这个函数pBase->NameOf(); //调用虚拟函数pBase->InvokingClass();//调用非虚拟函数pDerived->NameOf();//调用虚拟函数pDerived->InvokingClass(); //调用非虚拟函数}分析2该程序的输出是:Derived::NameOfInvoked by BaseDerived::NameOfInvoked by Derived注意,不管调用NameOf函数的指针是通过指向基类的指针还是指向派生类的指针,它调用的函数是派生类的。因为NameOf是虚拟函数,而且pBase和pDerived指向的对象都是派生类的,故而调用函数是派生类的。因为虚拟函数只能为类类型的对象所调用,所以你不能把一个全局的或静态函数说明为虚拟的。在派生类中说明一个重载函数时可以用virtual关键字,但是这并不是必须的,因为重载一个虚拟函数,此函数就必然是虚拟函数。基类中的虚拟函数必须有定义,除非它们被说明为纯的。虚拟函数调用机制可以用范围分辨符(::)明确地限定函数名称的方法来加以限制。考虑前面的代码,用下面的代码调用基类的PrintBalance。pChecking->Account::PrintBalance(); //明确限定Account *pAccount=pChecking; //调用Account::PrintBalancepAccount->Account::PrintBalance();//明确限定上面例子中的两个对PrintBalance的调用都限制了虚拟函数的调用机制。
构造派生类对象时,首先构造其基类子对象,然后初始化派生类中的数据成员,最后运行派生类构造函数的函数体。 你的这个程序定义c的对象c时,调用c的默认构造函数,第一步会构造c的基类子对象b,但b又有基类子对象a,故先构造基类子对象a,输出constructing a,接着构造子对象b的部分,输出constructing b;第二步初始化c类中的数据成员b,a;第三步运行c的默认构造函数的函数体,故最后输出的是constructing c

文章TAG:介绍  二义  二义性的介绍  
下一篇