C++第01课 C++与C的区别(七)

时间:2021-09-03
本文章向大家介绍C++第01课 C++与C的区别(七),主要包括C++第01课 C++与C的区别(七)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.结构体基本区别

struct MM
{
    char name[20];
    int age;
    void print()    //默认为内联函数
    {
        cout << name << "\t" << age << endl;
    }
};
int main()
{
    //1.定义变量时省略关键字
    struct MM m;//C语言方式
    MM mm;
    //2.new MM
    MM* pMM = new MM;
    MM* pMMArr = new MM[4];
    //3.结构体可以包含函数
    MM mm1 = { "mm1",18 };
    MM mm2 = { "mm2",17 };
    MM* pmm = &mm2;
    mm1.print();
    pmm->print();

    return 0;
}

2.结构体的构造

struct Empty {
    void print() {
        cout << "空的结构体" << endl;
    }
};
//C++允许在定义结构体时给数据赋值,当我们构建一个没有初始化的对象时采取默认值
struct MM {
    char name[20] = "小可爱";
    int age = 16;
    MM() = default;
    MM(const char* name,int age):age(age){
        strcpy(this->name, name);
    }
    void print() {
        cout << name << "\t" << age << endl;
    }
};
struct Boy {
    int age;
    //删掉默认构造函数
    Boy() = delete;
};
int main()
{
    cout << sizeof(struct Empty) << endl;    //空的结构体占用一个字节的标识位(函数对结构体内存不影响)
    MM mm;
    mm.print();
    MM mm1 = { "小甜心",18 };
    mm1.print();
    //创建对象的过程就是调用构造函数的过程
    MM mm2("小宝贝", 19);
    mm2.print();
    //new对象的过程也是调用构造函数的过程
    //先创建一个无名对象,然后把无名对象的首地址赋值给指针
    MM* mm3 = new MM("张三",14);
    mm3->print();

    return 0;
}

3.结构体的几种初始化方式

struct Boy {
    //1.定义结构体的时候初始化
    char name[20]="张三";
    int age=10;
    //2.构造函数完成数据初始化 常用
    Boy() = default;
    Boy(const char* name, int age) :age(age) {
        strcpy(this->name, name);
    }
    //3.通过成员函数传参
    void init(const char* name, int age) {
        strcpy(this->name, name);
        this->age = age;
    }
    //4.提供返回引用
    int& getAge()
    {
        return age;
    }
    void print() {
        cout << name << "\t" << age << endl;
    }
};

4.构造函数对定义变量的影响

struct Test {
    char name[20];
    int age;
    Test(const char* name, int age) {
        strcpy(this->name, name);
        this->age = age;
        cout << "调用构造函数" << endl;
    }
    void print() {
        cout << name << "\t" << age << endl;
    }
};
void print(Test t) {//传参是赋值方式
    t.print();
}
int main()
{
    //下面的代码也是调用构造函数的过程
    Test t = { "张三",12 };    //调用两个参数的构造函数
    Test t1("李四", 15);
    t1 = t;    //和Test t = { "张三",12 };    完全不一样
    t1.print();
    return 0;
}

原文地址:https://www.cnblogs.com/creature-lurk/p/15225212.html