• C++ 继承


    1、继承相关函数功能实现

    实现一个图形类(Shape),包含受保护成员属性:周长、面积,公共成员函数:特殊成员函数

    定义一个圆形类(Circle),继承自图形类,包含私有属性:半径,公共成员函数:特殊成员函数、以及获取周长、获取面积函数

    定义一个矩形类(Rect),继承自图形类,包含私有属性:长度、宽度,公共成员函数:特殊成员函数、以及获取周长、获取面积函数

    在主函数中,分别实例化圆形类对象以及矩形类对象,并测试相关的成员函数。

    1. #include
    2. using namespace std;
    3. //1、图形类
    4. class Shape
    5. {
    6. protected:
    7. double perimeter; //周长
    8. double area; //面积
    9. public:
    10. Shape(){} //无参构造
    11. Shape(double a,double b):perimeter(a),area(b)
    12. {cout<<"Shape::有参构造"<
    13. };
    14. //2、定义一个圆形类(派生类),继承图形
    15. class Circle:public Shape
    16. {
    17. private:
    18. double r; //半径
    19. public:
    20. Circle(){} //无参构造
    21. Circle(double radius) : Shape(2 * 3.14 * radius, radius * radius*3.14),r(radius) {}
    22. ~Circle() { cout << "Circle destructor" << endl;}
    23. //获取周长
    24. double Cir_perimeter()
    25. {
    26. return perimeter=2*3.14*r;
    27. }
    28. //获取面积
    29. double Cir_area()
    30. {
    31. return area=r*r*3.14;
    32. }
    33. };
    34. //3、矩形类
    35. class Rect:public Shape
    36. {
    37. private:
    38. double l; //长度
    39. double k; //宽度
    40. public:
    41. Rect(){} //无参构造
    42. Rect(double m,double n) : Shape((m+n)*2, m*n),l(m),k(n) {}
    43. ~Rect() {
    44. cout << "Rect destructor" << endl;
    45. }
    46. //获取周长
    47. double R_perimeter()
    48. {
    49. return (l+k)*2;
    50. }
    51. //获取面积
    52. double R_area()
    53. {
    54. return area=l*k;
    55. }
    56. };
    57. int main()
    58. {
    59. //调用圆形相关函数
    60. Circle c1(3);
    61. cout << "Circle perimeter: " << c1.Cir_perimeter() << endl;
    62. cout << "Circle area: " << c1.Cir_area() << endl;
    63. //调用方形相关函数
    64. Rect r1(4,5);
    65. cout << "Rect perimeter: " << r1.R_perimeter() << endl;
    66. cout << "Rect area: " << r1.R_area() << endl;
    67. return 0;
    68. }

    这段代码实现了一个简单的图形类和圆形、矩形两个派生类

    其中,图形类有周长和面积两个成员变量,圆形类和矩形类分别继承了图形类,并重写了计算周长和面积的函数。在主函数中,通过创建圆形和矩形对象,调用相应的函数来计算周长和面积并输出结果。

    考察知识点:继承、特殊成员函数

     2、笔试面试常见题型之c++

    (1)面向对象的三大特征

     面向对象的三大特征:封装、继承、多态,如果有第四大特征,外加一个抽象

    (2)什么是命名空间,为什么要使用命名空间

     主要作用是解决多人协同开发程序时名字污染(名字冲突)问题

      所谓命名空间,其实相当于给名字加个“姓氏”

    (3)谈谈C++中的友元

    友元包括友元函数和友元类,全局函数作为友元函数格式:在类内进行全局函数的声明:friend 函数头;

    -友元是单向的,A将B设置成友元,则A允许B访问自己的成员,而B不一定允许A访问其成员

    -友元不具有传递性:A是B的朋友,B是C的朋友,那么A不一定是C的朋友

    -友元不具有继承性:父类的朋友不一定是子类的朋友

    -友元破坏了类的封装性,使得访问权限形同虚设,所以不在万不得已的情况下,尽可能不使用友元

    -必须使用友元的情况:插入和提取运算符重载时,需要使用全局函数作为友元函数

    (4)C++中的类提供的特殊成员函数有哪些

    系统提供---为什么要显性定义-----情况

    析构函数:类对象----类对象以外的成员----显性对像

    (6)C++中的静态成员函数和静态成员变量

    回答步骤:为什么使用静态成员、静态成员如何定义、静态成员如何使用

    静态成员与非静态成员的区别

    (6)C++中深浅拷贝问题

    回答步骤:发生的背景、浅拷贝、浅拷贝的缺陷、深拷贝如何实现

    1、在一个类中,如果没有显性定义拷贝构造函数,系统会默认提供一个拷贝构造函数,来完成类对象之间的简单赋值,这个拷贝构造函数是一个浅拷贝,如果类中无指针成员,那么使用该拷贝构造函数没有问题

    2、如果类中有指针成员并且指向堆区空间,使用浅拷贝就会造成对同一个堆区空间的多次释放问题,会产生double free的段错误

    3、此时就需要显性定义拷贝构造函数完成深拷贝:在拷贝构造函数的初始化列表中,给自己的指针成员重新申请出一个空间,将原对象的指针成员指向的空间内容赋值过来,即可完成深拷贝

     知识总结:

  • 相关阅读:
    lammps提取和保存data文件中力场参数的技巧
    [每日一题]170:分糖果 II
    Python通过下标获取指定的文件并复制到一个新的文件
    力扣刷题Days19-637.二叉树的层平均数
    SDN落地场景
    Kubernetes网络侃闲天
    canvas图像绘制(有放大缩小和拖动功能)
    impdp导schema报ORA-31625异常处理
    pmap gdb 分析堆外内存泄露情况
    【JavaScript-26】js的内置对象Math,随机数获取随机颜色
  • 原文地址:https://blog.csdn.net/YSTXDY/article/details/132838599