一个虚拟主机可以做几个网站,企业购,wordpress 知言主题,安徽省所有建设类网站文章目录 前言继承继承是什么#xff1f;三种访问权限的继承#xff1a; 函数重载与运算符重载函数重载运算符重载可重载运算符不可重载运算符 前言
第三次学习记录#xff0c;依旧是C面向对象的内容。 继承
继承是什么#xff1f;
C中的继承是一种面向对象编程三种访问权限的继承 函数重载与运算符重载函数重载运算符重载可重载运算符不可重载运算符 前言
第三次学习记录依旧是C面向对象的内容。 继承
继承是什么
C中的继承是一种面向对象编程OOP的重要概念它允许你创建一个新的类通过继承已有的类的特性成员变量和成员函数从而实现代码的重用和构建层次结构。
当创建一个类时不需要重新编写新的数据成员和成员函数只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类新建的类称为派生类。
基类也称为父类或超类这是原始的类它包含共享的特性和行为通常具有更广泛的适用性。派生类也称为子类或子类这是从基类继承特性的新类通常包括一些新特性或行为。 创建派生类使用class关键字后跟类名。然后使用冒号指定基类。
class BaseClass {// 基类成员和方法
};class DerivedClass : public BaseClass {// 派生类成员和方法
};一个类可以派生多个类这意味着它可以从多个基类继承数据和函数。如下
class Derived : public A, public B三种访问权限的继承
当一个类派生自基类该基类可以被继承为 public、protected 或 private 几种类型。
公有继承public当一个类派生自公有基类时基类的公有成员也是派生类的公有成员基类的保护成员也是派生类的保护成员基类的私有成员不能直接被派生类访问但是可以通过调用基类的公有和保护成员来访问。保护继承protected 当一个类派生自保护基类时基类的公有和保护成员将成为派生类的保护成员。私有继承private当一个类派生自私有基类时基类的公有和保护成员将成为派生类的私有成员。 实例
#include iostreamusing namespace std;// 基类 Shape
class Shape
{public:void setWidth(int w){width w;}void setHeight(int h){height h;}protected:int width;int height;
};// 基类 PaintCost
class PaintCost
{public:int getCost(int area){return area * 70;}
};// 派生类
class Rectangle: public Shape, public PaintCost
{public:int getArea(){ return (width * height); }
};int main(void)
{Rectangle Rect;int area;Rect.setWidth(5);Rect.setHeight(7);area Rect.getArea();// 输出对象的面积cout Total area: Rect.getArea() endl;// 输出总花费cout Total paint cost: $ Rect.getCost(area) endl;return 0;
}函数重载与运算符重载
C 允许在同一作用域中的某个函数和运算符指定多个定义分别称为函数重载和运算符重载。
函数重载
在C中函数重载是一种允许你为同一函数名创建多个不同版本的函数的机制。这些不同版本的函数在参数的类型、个数或顺序上有所不同编译器会根据调用时提供的参数来确定应该调用哪个版本的函数。
特点
函数名相同参数列表必须不同
#include iostreamint add(int a, int b) {return a b;
}double add(double a, double b) {return a b;
}int add(int a, int b, int c) {return a b c;
}int main() {int result1 add(5, 3);double result2 add(2.5, 1.5);int result3 add(1, 2, 3);std::cout Result 1: result1 std::endl;std::cout Result 2: result2 std::endl;std::cout Result 3: result3 std::endl;return 0;
}这里定义了三个相同名字的 add函数但是形参都各不相同。
编译and执行后的结果
Result 1: 8
Result 2: 4
Result 3: 6注意的点
函数重载可以用于普通函数、成员函数包括类成员函数进行函数重载时要保证函数参数列表足够不同以便编译器能够正确地选择要调用的函数版本
运算符重载
C中的运算符重载是一种允许你重新定义标准C运算符的含义的机制以便它们适用于自定义数据类型或类对象。
运算符重载的语法要重载一个运算符你需要在类定义中创建一个特殊的成员函数该成员函数的名称是**operator**后跟要重载的运算符。
return_type operator op(parameters) {// 运算符的重载实现
}重载运算符的使用一旦你重载了一个运算符你可以在类的对象之间使用该运算符就像标准运算符一样。编译器会调用你重载的运算符函数来执行相应的操作。
#include iostreamclass Complex {
private:double real;double imag;public:Complex(double r, double i) : real(r), imag(i) {}Complex operator (const Complex other) {return Complex(real other.real, imag other.imag);}void display() {std::cout real imag i std::endl;}
};int main() {Complex a(2.0, 3.0);Complex b(1.5, 2.5);Complex c a b; // 使用重载的加法运算符c.display();return 0;
}这里就是重新声明了 运算符的使用原本 加法 11现在的 号可以 实现 “11,22”的操作。
编译and执行的结果
3.5 5.5i可重载运算符不可重载运算符
下面是可重载的运算符列表
下面是不可重载的运算符列表