C++单继承与多继承的区别
单一继承: 单一继承是一种派生类只从一个基类继承公共、私有或保护属性的方式。在单一继承中,派生类使用单个基类的特征或成员。根据在继承父类或基类时指定的访问说明符,这些基类成员可以由派生类或子类访问。
语法:
Class DerivedClass_name : Access-specifier Base_Class
{
//Class's Body
};
单一继承示例:
#include<iostream>
using namespace std;
class A {
public:
int k = 1000;
float salary = 80000;
};
class B : public A {
public:
float bonus = 8000;
void ts()
{
cout<<"Total salary.."<<(salary + bonus)<<endl;
}
};
int main()
{
B b1;
cout<<"Salary:"<<b1.salary<<endl;
cout<<"Bonus:"<<b1.bonus<<endl;
b1.ts();
return 0;
}
输出:
Salary: 80000
Bonus: 8000
Total salary..88000
在这个例子中,A是基类或父类,B是派生类或子类。
多重继承: 多重继承是指派生类获得两个或更多基类的方式。在多重继承中,允许派生类使用继承的基类的联合特征。每个基类通过通知每个基类单独的访问说明符被派生类继承。根据在继承父类或基类时指定的访问说明符,这些基类成员可以由派生类或子类访问。
// 例子:
#include<iostream>
using namespace std;
class A
{
protected:
int a;
public:
void set_A()
{
cout<<"Enter the Value of A=";
cin>>a;
}
void disp_A()
{
cout<<endl<<"Value of A="<<a;
}
};
class B: public A
{
int b,p;
public:
void set_B()
{
set_A();
cout<<"Enter the Value of B=";
cin>>b;
}
void disp_B()
{
disp_A();
cout<<endl<<"Value of B="<<b;
}
void cal_product()
{
p=a*b;
cout<<endl<<"Product of "<<a<<" * "<<b<<" = "<<p;
}
};
main()
{
B _b;
_b.set_B();
_b.cal_product();
return 0;
}
输出:
Enter the Value of A= 5
5
Enter the Value of B= 9
9
Product of 5 * 9 = 45
// 示例:
#include<iostream>
using namespace std;
class A
{
protected:
int a;
public:
void set_A(int x)
{
a=x;
}
void disp_A()
{
cout<<endl<<"A的值 ="<<a;
}
};
class B: public A
{
int b,p;
public:
void set_B(int x,int y)
{
set_A(x);
b=y;
}
void disp_B()
{
disp_A();
cout<<endl<<"B的值 ="<<b;
}
void cal_product()
{
p=a*b;
cout<<endl<<"a和b的乘积是 "<<a<<" * "<<b<<" = "<<p;
}
};
main()
{
B _b;
_b.set_B(4,5);
_b.cal_product();
return 0;
}
输出
a和b的乘积是4 * 5 = 20
语法:
class 派生类名 : 访问修饰符 基类名1, 访问修饰符 基类名2
{
// 类的主体
};
多继承的示例:
#include<iostream>
using namespace std;
class A {
public:
float salary = 80000;
};
class B {
public:
float bonus = 8000;
};
class C : public A, public B {
public:
void ts()
{
cout<<"总工资.."<<(salary + bonus)<<endl;
}
};
int main()
{
C b1;
b1.ts();
return 0;
}
输出:
总工资..88000
在这个示例中,A和B是基类,C是派生类。
// 示例:
#include <iostream>
using namespace std;
class A
{
protected:
int a;
public:
void get_a(int n)
{
a = n;
}
};
class B
{
protected:
int b;
public:
void get_b(int n)
{
b = n;
}
};
class C : public A,public B
{
public:
void display()
{
cout << "a的值:" <<a<< endl;
cout << "b的值:" <<b<< endl;
cout<<"a和b的乘积是:"<<a*b;
}
};
int main()
{
C c;
c.get_a(10);
c.get_b(20);
c.display();
return 0;
}
输出
a的值:10
b的值:20
a和b的乘积是:200
单重继承与多重继承的区别:
序号 | 单一继承 | 多重继承 |
---|---|---|
1. | 单一继承是指派生类只继承一个基类。 | 而多重继承是指派生类继承两个或者更多的基类。 |
2. | 在单一继承中,派生类使用单个基类的特征。 | 而在多重继承中,派生类综合使用所继承的多个基类的特征。 |
3. | 与多重继承相比,单一继承的运行时间更短,因为开销更小。 | 而多重继承的运行时间更长,因为开销更大。 |
4. | 单一继承更接近于专业化。 | 相比之下,多重继承更接近于概括化。 |
5. | 单一继承的实现方式为 Class DerivedClass_name : access_specifier Base_Class{}; 。 | 而多重继承的实现方式为 Class DerivedClass_name : access_specifier Base_Class1, access_specifier Base_Class2, ….{}; 。 |
6. | 单一继承相对于多重继承更加简单。 | 相比之下,多重继承相对于单一继承更加复杂。 |
7. | 单一继承可以在任何编程语言中实现。 | C++支持多重继承,但是多重继承不能在任何编程语言中实现(例如,C#、Java不支持多重继承)。 |
8. | 单一继承构建继承树。 | 多重继承构建了继承有向无环图(DAG)。 |