01_对象和malloc
#include<iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct book_bag{
int color;
int book_sum;
book_bag(){
cout<<"book default constrcution!"<<endl;
}
book_bag(int c, int b){
cout<<"book constrcution!"<<endl;
color =c,book_sum = b;
}
~book_bag(){
cout<<"book destrcutor!"<<endl;
}
};
struct Student{
int id=1001;//成员变量或对象
char *name=nullptr;
int age=20;
int score=99;
// book_bag bg;
Student(){cout<<"student default construction!"<<endl;}
Student(int i,const char*n, int a,int s){
cout<<"student "<<n<<" construction!"<<endl;
id=i;
if(n){
name =(char*)malloc(strlen(n)+1);
strcpy(name,n);
}
age=a;score=s;
}
//析构函数是释放初始化的变量
//析构函数不可以重载
~Student()
{
cout<<"student "<<name<<" destructor!"<<endl;
if(name)free(name);
}
};//end class Student
int main()
{
// Student stu1(1002,"lisi",20,90);
// Student stu2(1003,"maliu",20,90);
// cout<<stu1.name<<endl;
//malloc仅仅是分配一个空间,没有任何初始化的行为
Student *pstu1 = (Student*)malloc(sizeof(Student));
pstu1->id =1001;
strcpy(pstu1->name,"zhangsan");
pstu1->age=20;
pstu1->score=100;
//pstu1->set_age(20);
cout<<pstu1->id<<endl;
//free仅仅是一个空间的回收,没有任何析构的行为
free(pstu1);
return 0;
}
02_对象和new
#include<iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct book_bag{
int color;
int book_sum;
book_bag(){
cout<<"book default constrcution!"<<endl;
}
book_bag(int c, int b){
cout<<"book constrcution!"<<endl;
color =c,book_sum = b;
}
~book_bag(){
cout<<"book destrcutor!"<<endl;
}
};
struct Student{
int id=1001;//成员变量或对象
char *name=nullptr;
int age=20;
int score=99;
// book_bag bg;
Student(){cout<<"student default construction!"<<endl;}
Student(int i,const char*n, int a,int s){
cout<<"student "<<n<<" construction!"<<endl;
id=i;
if(n){
name =(char*)malloc(strlen(n)+1);
strcpy(name,n);
}
age=a;score=s;
}
//析构函数是释放初始化的变量
//析构函数不可以重载
~Student()
{
cout<<"student "<<name<<" destructor!"<<endl;
if(name)free(name);
}
};//end class Student
int main()
{
// Student stu1(1002,"lisi",20,90);
// Student stu2(1003,"maliu",20,90);
// cout<<stu1.name<<endl;
// Student *pstu1 = (Student*)malloc(sizeof(Student));
//new完成的事情分两步:
//1,申请空间,此处和malloc做的一样
//2,调用对应的构造函数,进行初始化
//3,返回的地址不用强制类型转换
Student *pstu2 = new Student(1001,"zhangsan",20,100);
/*
pstu1->id =1001;
strcpy(pstu1->name,"zhangsan");
pstu1->age=20;
pstu1->score=100;
//pstu1->set_age(20);
*/
// cout<<pstu1->id<<endl;
cout<<pstu2->id<<endl;
// free(pstu1);
//delete做的事情分两步:
//1,先调用析构函数
//2,然后再释放对象本身
delete pstu2;
pstu2 =nullptr;
pstu2->age=21;
return 0;
}