c++继承,运算符重载

继承

继承允许我们依据另一个类来定义一个新的类,这样做达到了重用代码,和提高执行率的效果.当创建一个类时,不需要重新编写新的成员变量和成员函数,只需指定新建的类继承了一个已有的类即可.这个已有的类称之为基类(父类),新建的类称之为派生类(子类).一个类可以继承自多个父类,可以从多个基类继承数据和函数.

 

 

多继承和菱形继承

类A,类B继承father,类C继承A和B,这样在C中会有两个同名成员变量a,导致不知道具体用的哪一个基类中的a,会产生二义性问题。

解决菱形继承中,父类被继承多次的问题,使用虚继承可以解决.虚继承时只会继承到一份.

#include<iostream>

 using namespace std;

 class father

 {

 public :

 int a;

};

 class A:virtual public father{};//虚继承会创建一个虚指针

 class B:virtual public father{};

 class C:public A,public B{};

Int main(){

 C c;

 c.A::a = 2;//利用作用域解决二义性问题

 c.a = 3;//利用虚继承解决二义性问题

 return 0;}

运算符重载(函数重载)

c++运算符操作对象只局限于基本的内置数据类型(int,float,double,char等),但是对于我们自定义的类型(类)是没有办法操作的。但是大多数时候我们需要对类进行类似的运算,这个时候我们就需要对运算符重新定义,赋予其新的功能,来满足要求.

c++重载运算符的实质是函数重载.运算符重载实质上是c++的一种多态,叫做静态多态,目的是为了让我们使用同名的函数来完成不同的操作.

class box {

public:

int height;

int weight;

int length;

box() {

height = 1;

weight = 1;

length = 1;

}

box(int length, int weight = 1, int height = 1) {

this->length = length;

this->weight = weight;

this->height = height;

}

box operator+=(box other) {          //返回值为box方便链式操作

this->height += other.height;

this->weight += other.weight;

this->length += other.length;

return *this;

}

box& operator +(box& other) {

box b;

b.height = this->height + other.height;

b.weight = this->weight + other.weight;

b.length = this->length + other.length;

return b;

}

int operator >(box& other) {

if (this->height > other.height)

return 1;

else

return 0;

}

};

ostream& operator<<(ostream& o, box b) {           //返回值为ostram方便链式操作

o << b.height << " " << b.length << " " << b.weight << endl;

return o;

}

int main() {

box b1, b2,b3;

b1 += b2;//b1.operator+=(b2);

b1 += b2 += b3;

b1.operator+=(b2.operator+=(b3));

/*左值:有名字,能找到地址能修改  右值:没有名字,找不到地址不能修改

左值引用用&   右值引用用&&*/

b1.operator+(b2.operator+(b3));

b1 > b2;

box b;

cout << b << endl;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值