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; }
浙公网安备 33010602011771号