C++ 2024-4-1 作业

cpp 复制代码
#include <iostream>
using namespace std;

class A
{
public:
    int a;
    A(int a):a(a){cout<<"A的有参构造"<<endl;}
};
class B:virtual public A
{
public:
    int b;
    B(int a,int b):A(a),b(b){cout<<"B的有参构造"<<endl;}
};
class C:virtual public A
{
public:
    int c;
    C(int a,int c):A(a),c(c){cout<<"C的有参构造"<<endl;}
};
//汇集子类
class D:public B,public C
{
public:
    int d;
    D(int a,int b,int c,int d):A(a),B(a,b),C(a,c),d(d){cout<<"D的有参构造"<<endl;}
    void show()
    {
        cout<<"d="<<d<<endl;
        cout<<"c="<<c<<endl;
        cout<<"b="<<b<<endl;
        cout<<"a="<<a<<endl;
    }
};
int main()
{
    //实例化汇集子类D的类对象
    D d1(10,20,30,40);
    d1.show();
    d1.a = 90;
    d1.show();//对于公共基类继承加上virual后,在汇集子类中只能找到一个属性a
    d1.B::A::a = 80;
    d1.C::A::a = 80;
    d1.show();
    return 0;
}
cpp 复制代码
#include <iostream>

using namespace std;


class Father
{
    int *p;
    const string name;
public:
    Father():p(new int),name("张三"){cout<<"Father的无参构造"<<endl;}//Father的无参构造
    Father(int value):p(new int(value)),name("张三"){cout<<"Father的有参构造"<<endl;}
    Father(const Father &other):p(new int(*(other.p))),name("张三"){cout<<"Father的拷贝构造"<<endl;}
    Father &operator=(const Father &other)
    {
        this->p = other.p;//浅拷贝
        *(this->p) = *(other.p);//深拷贝
        cout<<"Father的拷贝赋值"<<endl;
        return *this;
    }
    ~Father()
    {
        delete p;
        cout<<"Father的析构函数"<<endl;
    }
    void show()
    {
        cout<<"p的指向"<<p<<endl;
        cout<<"*p="<<*p<<endl;
        cout<<"name = "<<name<<endl;
    }
};
class Son:public Father
{
    int *age;
public:
    Son(){};//Son的无参构造;
    Son(int age):Father(),age(new int(age)){cout<<"Son的有参构造"<<endl;}
    Son(int age,int value):Father(value),age(new int(age)){cout<<"Son的有参构造"<<endl;}
    using Father::Father;//使用父类的构造函数
    Son(const Son &other):Father(other),age(new int(*(other.age))){cout<<"Son的拷贝构造"<<endl;}
    Son &operator=(const Son &other)
    {
        *(this->age) = *(other.age);
        Father::operator=(other);
        return *this;
    }//Son的拷贝赋值函数
    ~Son()
    {
        delete  age;
        cout<<"Son的析构函数"<<endl;
    }
};
int main()
{
    Son s1(20,30);
    s1.show();
    Son s2 = s1;
    s2.show();


    return 0;
}
相关推荐
FL16238631292 小时前
[C#][winform]基于yolov8的水表读数检测与识别系统C#源码+onnx模型+评估指标曲线+精美GUI界面
开发语言·yolo·c#
小白菜又菜3 小时前
Leetcode 3432. Count Partitions with Even Sum Difference
算法·leetcode
cnxy1884 小时前
围棋对弈Python程序开发完整指南:步骤1 - 棋盘基础框架搭建
开发语言·python
wuhen_n5 小时前
LeetCode -- 15. 三数之和(中等)
前端·javascript·算法·leetcode
sin_hielo5 小时前
leetcode 2483
数据结构·算法·leetcode
程序员-周李斌5 小时前
Java 死锁
java·开发语言·后端
Xの哲學5 小时前
Linux多级时间轮:高精度定时器的艺术与科学
linux·服务器·网络·算法·边缘计算
大头流矢6 小时前
归并排序与计数排序详解
数据结构·算法·排序算法
阿闽ooo6 小时前
外观模式:从家庭电源控制看“简化接口“的设计智慧
c++·设计模式·外观模式
油泼辣子多加6 小时前
【信创】算法开发适配
人工智能·深度学习·算法·机器学习