第12周 《C++语言基础》程序阅读——多重继承(3)

问题描述:

(2)阅读程序,写出执行结果

#include <iostream>
using namespace std;
class Base
{
public:
    Base(char i) { cout<<"Base constructor. --"<<i<<endl; }
};
class Derived1:virtual public Base
{
public:
    Derived1(char i,char j):Base(i)
    {
        cout<<"Derived1 constructor. --"<<j<<endl;
    }
};
class Derived2:virtual public Base
{
public:
    Derived2(char i,char j):Base(i)
    {
        cout<<"Derived2 constructor. --"<<j<<endl;
    }
};
class MyDerived:public Derived1,public Derived2
{
public:
    MyDerived(char i,char j,char k,char l,char m,char n,char x): Derived2(i,j), Derived1(k,l), Base(m), d(n)
    {
        cout<<"MyDerived constructor. --"<<x<<endl;
    }
private:
    Base d;
};
int main()
{
    MyDerived obj('A','B','C','D','E','F','G');
    return 0;
}

预计运行结果:

Base constructor.--A

Derived1 constructor--B

Base constructor.--C

Derived2 constructor.--D

Base constructor.--E

Base constructor.--F

MyDerived constructor.--G

实际运行结果:

错误分析:因为是虚继承所以

MyDerived(char i,char j,char k,char l,char m,char n,char x): Derived2(i,j), Derived1(k,l), Base(m), d(n) { cout<<"MyDerived constructor. --"<<x<<endl; }

中先执行 Base(m)所以先输出

Base constructor.--E

然后以为消除2义性Derived1和Derived2中关于Base的构造函数不在调用,所以输出:

Derived1 constructor--D

Derived2 constructor--B

然后执行d(n);输出

Base constructor.--F

最后执行cout<<"MyDerived constructor.--G"<<‘\12‘;输出:

MyDerived constructor.--G

有点绕呢。

时间: 2024-10-27 01:36:46

第12周 《C++语言基础》程序阅读——多重继承(3)的相关文章

2.6-Java语言基础(程序流程控制)

判断结构 选择结构 循环结构 2.6.1  判断结构 if语句 三种格式: 1.  if(条件表达式) { 执行语句: } 2.  if(条件表达式) { 执行语句: } else { 执行语句: } 3. if(条件表达式) { 执行语句: } else if (条件表达式) { 执行语句: } -- else { 执行语句: } if语句特点: a,每一种格式都是单条语句. b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现.好处是:可以写在其他表达式中. c,条件表达式无论写成什

第12周 《C++语言基础》程序阅读——多重继承(1)

问题描述: (1)阅读程序,写出执行结果 #include <iostream> using namespace std; class A { public: A() { a=0; } A (int i) { a=i; } void print() { cout<<a<<" "; } private: int a; }; class B: public A { public: B() { b=0; } B(int i, int j, int k):

第12周 《C++语言基础》程序阅读——多重继承(2)

问题描述: (2)阅读程序,写出执行结果 #include <iostream> using namespace std; class A { public: A(char *s) { cout<<s<<endl; } }; class B:public A { public: B(char *s1, char *s2):A(s1) { cout<<s2<<endl; } }; class C:public A { public: C(char

第12周 《C++语言基础》程序阅读——多重继承(4)

问题描述: (4)阅读程序,写出执行结果,并回答问题     #include<iostream> using namespace std; class A { public: int n; }; class B:public A {}; // class B:virtual public A{}; class C:public A {}; // class C:virtual public A{}; class D:public B,public C { public: int getn()

第12周 《C++语言基础》程序阅读——多重继承(5)

问题描述: (5)阅读下面类的定义,请说出在测试函数中不同情况的调用产生的结果   <span style="font-family:KaiTi_GB2312;font-size:18px;color:#ff6666;"><strong>#include <iostream> using namespace std; class A { protected: int a,b; public: A(int aa, int bb):a(aa), b(bb

第12周 程序阅读-多重继承4

#include<iostream> using namespace std; class A { public: int n; }; class B:public A {}; // class B:virtual public A{}; class C:public A {}; // class C:virtual public A{}; class D:public B,public C { public: int getn() {return B::n;} }; int main() {

第12周 程序阅读-多重继承1

#include <iostream> using namespace std; class A { public: A() { a=0; } A (int i) { a=i; } void print() { cout<<a<<" "; } private: int a; }; class B: public A { public: B() { b=0; } B(int i, int j, int k): A(i),aa(j) { b=k; } /

第12周 程序阅读-多重继承3

#include <iostream> using namespace std; class Base { public: Base(char i) { cout<<"Base constructor. --"<<i<<endl; } }; class Derived1:virtual public Base { public: Derived1(char i,char j):Base(i) { cout<<"Der

大数据spark学习第一周Scala语言基础

Scala简单介绍 Scala(Scala Language的简称)语言是一种能够执行于JVM和.Net平台之上的通用编程语言.既可用于大规模应用程序开发,也可用于脚本编程,它由由Martin Odersk于2001开发.2004年開始程序执行在JVM与.Net平台之上.由于其简洁.优雅.类型安全的编程模式而受到关注. Scala的创建者——Martin Odersk 在Scala的创建之初,并没有怎么引起重视,随着Apache Spark和Apache Kafka这样基于Scala的大数据框架