C++ 类基础

发布时间:2024年01月16日

在C++中将关联的数据和算法封装起来,形成结构体或类。
类(class):完成某一功能的数据和算法的集合,是抽象的概念。
对象:类的实例,具体的概念,是存在于内存中的。

定义格式:class: C++定义类关键字,名字一般以C开头,类中包含类成员方法和类成员属性。

class CPeople {
    //定义类成员属性(类成员变量),一般以m_作为开头
	string m_strName;//名字     
    bool m_bSex;     //性别
	int m_nAge;      //年龄

	void eat() //类成员方法
	{		
	cout << m_strName << "在吃饭" << endl;
}
	void showPeople() //类成员方法
	{
		cout << "name: " << m_strName << ", sex: " << m_bSex << ",age: " << m_nAge << endl;
	}
};

定义类对象格式:类名 类对象的名字。

调用类成员属性和类成员方法的写法:类对象.类成员属性或者类成员方法。

CPeople peo;//类对象
peo.m_strName = "小刘";
peo.eat();//输出结果为小刘在吃饭

注意:在类中定义的类成员属性和类成员方法默认是私有的,想要调用就需要将他们变为共同的,需要在前面加上访问修饰符(public,protected,private),都是关键字。

public:公共的,在类内和类外都可以使用

protected:在类内,和继承中的子类中可以使用

private:在类内使用

修改后的类的代码:

class CPeople {
public:
	string m_strName;//定义类成员属性(类成员变量),一般以m_作为开头
	bool m_bSex;
	int m_nAge;
public:
	void eat() {//类成员方法
		cout << m_strName << "在吃饭" << endl;
	}
	void showPeople() {
		cout << "name: " << m_strName << ", sex: " << m_bSex << ",age: " << m_nAge << endl;
	}

};

如果类成员属性为私有或者是保护的,我们不能在主函数中去初始化,我们就需要利用构造函数去定义类成员属性。

构造函数:写法:类名(){}

如果是编译器提供的默认的,则是无参的,如果是自己手动重构,参数自定,无返回类型(并不是void) 当定义对象时会自动调用构造函数 一个类中构造函数可以有多个,是函数重载的关系,会根据实参自动匹配。

如果手动重构了任何的构造函数,编译器就不会提供默认的构造函数了,默认构造函数:CPeople() {}

CPeople() {//无参
	m_bSex = true;
	m_nAge = 20;
}
CPeople(string name,int age) {//有参
	m_strName = name;
	m_bSex = true;
	m_nAge = age;
}

在主函数调用时直接使用方法就可以。

CPeople peo2;//自动调用构造函数
peo2.showPeople();
CPeople peo3("小浩", 21);//匹配带参数的构造函数
peo3.showPeople();

一般情况下我们额外申请空间的时候最后回收空间我们需要用delete,当我们在构造函数中new了一个空间后,我们需要使用析构函数。

析构函数,写法:~类名(){}

如果没有手动重构析构函数,编译器会提供一个默认的析构函数~CPeople(){},如果有,则不会提供。

一个类中只有一个析构函数。

作用:用来回收额外申请的空间。

调用析构函数的时间:当对象生命周期结束时,自动调用析构函数,顺序:先调用析构,再回收对象本身的空间,new-delete类型,delete结束为生命周期结束。

例子:

	//在类中
CPeople(string name,int age) 
{
	m_strName = name;
	m_bSex = true;
	m_nAge = age;
	m_pNote = new char[20] {"学生"};
}
    ~CPeople()
	{
		if (m_pNote)
		{
			delete[]m_pNote;
			m_pNote = nullptr;
		}
	
	}
public:
	char* m_pNote;


int main()
{
	

	CPeople peo("小李",20);
	cout << "职业为" << peo.m_pNote << endl;
	


	system("pause");
	return 0;
}

文章来源:https://blog.csdn.net/m0_74773296/article/details/135602852
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。