C++基础

本文介绍了C++的基础知识,包括面向对象编程的概念,如类和对象的创建,以及构造函数的作用。重点讨论了动态内存管理,比较了C++中的new/delete与C的malloc/free的区别,并解释了虚函数和多态性的重要性。通过示例展示了虚函数在类继承中的应用,以及模板的使用,如何通过模板实现代码复用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++基础

面向对象编程
一切皆对象,将现实世界中的事物抽象成对象,用对象去处理相应的实际的问题

命名空间

全局范围之内取一块区域并命一个名称

动态内存

c++的动态内存与c的的异同:
malloc/free和new/delete都是在堆区申请空间和释放堆区空间
不同点:
(1)类型:C里的malloc/free是函数,C++里new/delete是一个操作符
(2)初始化:C里的malloc/free开辟堆区空间的时候不能进行初始化的工作,C++里的new/delete开辟空间的时候能进行初始化工作
(3)分配空间:C里的malloc/free开辟堆区空间的时候需要手动的去计算空间的大小,C++里的new/delete开辟空间的时候自动计算空间的大小(根据数据类型而定)
(4)堆空间类型:C里的malloc/free开辟堆区空间的时候需要强制类型转换,C++里的new/delete开辟空间的时候不需要强制类型转换
(5)C里的malloc/free仅仅只是做了开辟堆区空间的工作,没有做其他的工作,C++里的new/delete开辟空间的时候,不仅仅只是开辟了空间,而且还可以执行构造函数(完成变量的初始化工作)

类和对象

类是对一类东西的描述,比如动物,有四肢,毛发颜色,声音,水生还是陆生…,通常将这些属性作为类的属性; 然后将跑步,飞行,吃,喝,唱,跳,rap…作为函数进行描述。通过函数调用属性,达到函数要执行的操作。
万事万物皆对象,任何事物都可以是对象,C++当中的对象就是将类进行实例化,具体到万事万物,比如动物类,具体一下到什么动物,猫,狗,猪…等等.

构造函数

在实例化对象的时候编译器自动执行,将对象的属性具体化,比如把人当作一个类就是具体人的腿多长,多高,年纪多大,是男是女…

虚函数

在类继承调用函数的时候

#include "iostream"
#include"iomanip"
using namespace std;
class animal
{
public:
	void getcry()
	{
		cout<<"animal"<<endl;
	}
};
class dog :public animal
{
public:
	void getcry()
	{
		cout << "汪汪"<<endl;
	}
};
class cat :public animal
{
public :
	void getcry()
	{
		cout << "喵喵" << endl;
	}
};
void Cry(animal &a)
{
	 a.getcry();
}
int main()
{
	cout << "cat cry:" << endl;
	Cry(a);
	cout << "dog cry:" << endl;
	Cry(d);
}

运行结果:
在这里插入图片描述

class animal
{
public:
	virtual void getcry()//将getcry定义为虚函数
	{
		cout<<"animal"<<endl;
	}
};

运行结果:
在这里插入图片描述

虚函数表:

当类中定义虚函数的时候,编译器会自动生成一个虚函数表,继承虚函数的时候子类也会将继承的虚函数加入自己的虚函数表;当调用指针或者引用调用虚函数的时候,编译器就会去虚函数表中找到对应的虚函数执行。

虚函数总结

当类指针或者引用的对象调用的方法不是虚函数,会自动匹配当前对象类型(指针的类型或者引用的类型)的函数;将函数定义为虚函数,指针或者引用就会找到实际的对象类型(指针指向的数据类型或者引用的数据类型)而去匹配对应的方法(函数),就是动态绑定。
静态绑定:在编译阶段就将调用的函数确定下来了。
多态是面向对象编程的关键之一,而通过虚函数实现动态绑定,将多态的意义充分体现。

模板

模板相当于一个模具,固定的形状,但是当原料(数据类型)不一样的时候,生产出来的东西(对象)就不同。
函数模板:

template  <模板形参1,模板形参2.......> 函数的返回值   函数名(函数形参列表)
{
	//函数体
}

类模板:
template <模板形参> class 类名
{
//类体
};

例如:
template <class T1>class Test
{
public:
	T1 a;
	Test(T1 b)
	{
		a = b;
		cout << "a=" << a << endl;
	}

};

类模板实例化:类名<数据类型>对象名(构造函数的参数列表);

例如:
Test<int>test(10);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值