C++

初学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;
}

运行结果如下:
在这里插入图片描述
知识点:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值