C++ 继承

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

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

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

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

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

#include <iostream>

using namespace std;
//1、图形类
class Shape
{
protected:
    double perimeter;     //周长
    double area;     //面积
public:
    Shape(){}    //无参构造
    Shape(double a,double b):perimeter(a),area(b)
    {cout<<"Shape::有参构造"<<endl;}

};
//2、定义一个圆形类(派生类),继承图形
class Circle:public  Shape
{
private:
    double r;     //半径
public:
    Circle(){}    //无参构造
    Circle(double radius) :  Shape(2 * 3.14 * radius, radius * radius*3.14),r(radius) {}
    ~Circle() { cout << "Circle destructor" << endl;}

    //获取周长
    double Cir_perimeter()
    {
        return perimeter=2*3.14*r;
    }
    //获取面积
    double Cir_area()
    {
        return  area=r*r*3.14;

    }
};
//3、矩形类
class Rect:public Shape
{
private:
    double l;     //长度
    double k;    //宽度
public:
    Rect(){}    //无参构造
    Rect(double m,double n) : Shape((m+n)*2, m*n),l(m),k(n) {}
    ~Rect() {
           cout << "Rect destructor" << endl;
       }
    //获取周长
    double R_perimeter()
    {
        return (l+k)*2;
    }
    //获取面积
    double R_area()
    {
        return  area=l*k;
    }
};
int main()
{
    //调用圆形相关函数
    Circle c1(3);
    cout << "Circle perimeter: " << c1.Cir_perimeter() << endl;
    cout << "Circle area: " << c1.Cir_area() << endl;

    //调用方形相关函数
    Rect r1(4,5);
    cout << "Rect perimeter: " << r1.R_perimeter() << endl;
    cout << "Rect area: " << r1.R_area() << endl;
    return 0;
}

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

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

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

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

 知识总结:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值