C++

mac2025-11-27  10

初学C++

下面我们通过一个Person类来学习C++

#include<iostream> #include<string> using namespace std; //定义一个Person的类 class Person { public: /* 要点: 1.构造函数是为了生成具体的对象 2.构造函数的**名称**必须与**类名**一致 3.构造函数没有返回值,也没有void */ Person();//默认构造函数 Person(char* name,int age,char sex,float height,float weight)//有参构造 { m_name=new char[strlen(name)+1]; strcpy(m_name,name); m_age=age; m_sex=sex; m_height=height; m_weight=weight; cout<<"普通构造"<<endl; } Person(const Person& p)//拷贝构造 { /* if(m_name) delete [] m_name; */ m_name=new char[strlen(p.m_name)+1]; strcpy(m_name,p.m_name); m_age=p.m_age; m_sex=p.m_sex; m_height=p.m_height; m_weight=p.m_weight; cout<<"拷贝构造"<<endl; } ~Person()//析构函数用来销毁对象 { cout<<"析构函数"<<m_name<<endl; if(m_name) delete [] m_name; } //运算符的重载 bool operator<(const Person& p); bool operator==(const Person& p) { return m_age==p.m_age&&strcmp(m_name,p.m_name)==0; } //赋值运算符的重载的返回值必须为 :类名& Person& operator=(const Person& p) { if(m_name) delete [] m_name; m_name=new char[strlen(p.m_name)+1]; strcpy(m_name,p.m_name); m_age=p.m_age; m_sex=p.m_sex; m_height=p.m_height; m_weight=p.m_weight; cout<<"赋值"<<endl; return *this; } private: char* m_name; int m_age; char m_sex; float m_height; float m_weight; }; Person::Person() { m_name=new char[1]; *m_name='\0'; m_age=0; m_sex='M'; m_height=0.0f; m_weight=0.0f; cout<<"默认构造"<<endl; } bool Person::operator<(const Person& p) { //以年龄为标准 return m_age<p.m_age; } int main() { Person a;//因为没有参数,所以调用默认构造方式 Person b("tom",25,'M',1.86f,80.1f);//b是调用普通构造函数生成的 Person c("lily",22,'F',1.68f,49.0f);//c也是调用普通构造函数生成的 Person d(b); Person e=b;//拷贝构造,不是赋值 a=c; return 0; }

运行结果如下: 知识点:

public:都可以访问 private:只有类内的函数可以访问 protected:子类可以访问 成员(变量)和方法(函数)被封装到一个类中,一般成员设为private(私有);定义类时,与C语言中的定义结构体类似,不要忘记在大括号后加分号构造函数的名称必须与类名一致;构造函数没有返回值,也没有void赋值运算符的重载的返回值必须为 :类名&Person e=b;是拷贝构造,相当于Person e(b),而不是相当于Person e; e=b;程序结束时会调用析构函数,来销毁每一个对象,我们通过运行结果可以发现生成对象和销毁对象的顺序是相反的,类似于进栈出栈的顺序
最新回复(0)