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;
}
相关推荐
第二只羽毛17 分钟前
C++ 高并发内存池1
大数据·开发语言·c++·开源
不想看见40425 分钟前
C++/Qt 实习岗位深度解析【结合一次研发实习谈感受】
开发语言·c++·qt
靴子学长28 分钟前
Decoder only 架构下 - KV cache 的理解
pytorch·深度学习·算法·大模型·kv
王老师青少年编程40 分钟前
信奥赛C++提高组csp-s之组合数学专题课:鸽巢原理详解及案例实践
c++·组合数学·信奥赛·抽屉原理·csp-s·提高组·鸽巢原理
sjmaysee43 分钟前
Java框架SpringBoot(一)
java·开发语言·spring boot
寒秋花开曾相惜1 小时前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
Гений.大天才1 小时前
2026年计算机领域的年度主题与范式转移
算法
想唱rap1 小时前
Linux线程
java·linux·运维·服务器·开发语言·mysql
Tony Bai1 小时前
Rust 看了流泪,AI 看了沉默:扒开 Go 泛型最让你抓狂的“残疾”类型推断
开发语言·人工智能·后端·golang·rust
njidf1 小时前
C++与Qt图形开发
开发语言·c++·算法