多重继承编译
A. C++多重继承与多态的区别
C++多重继承与多明衡态的区别:
一,两者的定义不同:
1,C++多重继承:一个派生类指定多个基类,这样的继承结构被称做多重继承;
2,多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,多态(polymorphism),字面意思多种形状,多态的目的则是为了接口重用。
二,两者的继承形式不同:
1,多重继承的一般形式为:
class类名l:访问控制类名2,访问控制类名3,…访问控制类名n
(
…//定义派生类自己的成员
};
2,C++中,多态性分为两种,一种称为编译时多态,另一种为运行时多态:
(1)编译时多态,也就是函数重载,所谓函数重载是指同一个函数名局雀可以对应着多个函数的实现,具体调用哪个按照由参数个数,参数类型等来决定;
(2)桐槐早运行时多态,就是虚函数:在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,以实现你所想要的功能;比如:
class A {
public:virtual void test() {...}
void display(){...}
};
class B :public A {
public:virtual void test() {...}
void display(A& a){ a.display(); }
};
那么:
A* a = new A();
a->test();调用的是基类的
A* b = new B();
b->test();调用的是派生类的.
如果在A中不申明virtual,
那么:
A* b = new B();
b->test(); 会调用基类的。
B. 在C++中,什么是单继承什么是多重继承
从一个基类派生的继承称为单继承,单继承只继承一个类。
一个派生类指定多个基类,这样的继承结构被称做多重继承。
单一继承的一般形式为:
class派生类名:访问控制基类名
{
private:
成员说明列表
public:
成员说明列表
}
当在派生类定义中的访问控制(权限)设为public(公有)时,这个类的派生就称为“公有派生”,它有如下特点:
·基类的公有成员在派生类中仍然是公有的。
·基类的保护成员在派生类中仍然是保护的。
·基类的不可访问和私有成员在派生类中仍然是不可访问的。
因为派生是没有限制的,即派生类也可作为基类派生新的类,所以在派生类中有一种“不可访问成员”级别存在,脊隐段它要么是基类的不可访问成员,要么是基类的私有成员。
赋值兼容原则,就是在公有派生的情况下,一个派生类的对象可以作为基类的对象来使用(在公有派生的情况下,每一个派生类的对象都是携搜基类的一个对象一它继承了基类的所有成员,并且没有改变其访问权限)。
多重继承的一般形式为:
class类名l:访问控制类名2,访问控制类名3,…访问控制类名n
(
…//定义派生类自己的成员
};
从中可以看出,每个基类有一个访问控制来限制其中成员在派生类中的访问权限,其规则樱誉和单一继承是一样的。
C. C++多继承方式构造函数的执行顺序
明一个子类的对象穗册时,首先梁族斗调用父类的构造函数,如果一个子类有多个父类时,则按照声明的顺序一次执行父类的构造函数,如class Derived : public Base1,public Base2 你先声明Base1,后Base2,所以先调用Base1后Base2的构造函数,而与 Base2(z),Base1(y)的顺序无关。
本人现在缺分,橡磨给我加分吧!
D. 为什么在Java中类不能多重继承
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
C++中类可以多重继承历搭,Java中为什么不实现这个功能呢?也就是说,多重继承会带来哪些问题,从而导致Java放弃类的多重继承呢?Java中可以用接口来实现多重继承,那么与C++中类的多重继承相比,有什么优势呢?
解析:
JAVA语言让编程者无法找到指针来直接访问内存无指针,并且增添了自动的内存管理功能,从而有效地防止了c/c++语言中指针操作失误,如指针所造成的系统崩溃。但也不是说JAVA没有指针,虚拟机内部还是使用了指针,只是外人不得使用而已。这有利于Java程序的安全。
c++支持多重继承,这是c++的一个特征,它允许多父类派生一个类。尽管多重继承功能很强,差烂毁但使用复杂,而且会虚备引起许多麻烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了c++多重继承的功能,又避免了c++中的多重继承实现方式带来的诸多不便。
E. C++多重继承 父类存在同名函数
int main(int argc, char* argv[])
{
C c;
A* pA = &c;
B* pB = &c;
pA->foo(); //这里会输出和A相盯升关的信息
pB->foo(); /渣春/这里会输出和B相关的信息凯梁老
return 0;
}
// test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class A
{
public:
virtual void foo() {cout<<"A::foo()"<<endl;}
protected:
private:
};
class B
{
public:
virtual void foo() {cout<<"B::foo()"<<endl;}
protected:
private:
};
class MidA:public A
{
public:
virtual void fooCA() {};
virtual void foo()
{
A::foo();
}
protected:
private:
};
class MidB:public B
{
public:
virtual void fooCB() {};
virtual void foo()
{
B::foo();
}
protected:
private:
};
class C:public MidA, public MidB
{
};
int main(int argc, char* argv[])
{
printf("Hello World!\n");
C c;
A* pA = &c;
B* pB = &c;
pA->foo(); //这里会输出和A相关的信息
pB->foo(); //这里会输出和B相关的信息
return 0;
}
F. c++多重继承,我这里几个函数名相同的函数,参数个数不同为什么同名覆盖而不是重载
函数重载是是根据函正渣毁数的参数列表区分函数的版本,返回值不同是不能区分的。
比如 int fun( int a,int b);
在编译梁者的时候,编译器编译函数,生成一个类似"_fun_int_int"的名称放在库中,以便程序调用的时举备候使用。
如果你想重载void fun( int a,int b);
生成的函数名称也是"_fun_int_int"
函数在库中的名称是唯一的,就像你在程序中定义变量一样。
这就算是重定义吧(姑且这么说),这时编译器该调用哪个函数?
G. qt 多重继承
看看.pro文件里有没有加入“QT =+ network”的代码,没有的话加入试试编译一下。
看闷虚报错的蚂余燃信息,是说你构造函数的参数有问题,看看两个毁冲父类的构造函数参数是什么再改改