C++快速入门---虚方法(16)

本文详细介绍了C++中的虚方法概念及其应用,通过宠物类的实例展示了如何使用虚方法实现多态性。同时,文章还讲解了new和delete运算符的使用,强调了在C++中手动管理内存的重要性。

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

C++快速入门---虚方法(16)

 

new和delete

(new相当于malloc,delete相当于free)

在没有创建变量的情况下为有关数据分配内存。也就是直接创建一个指针并让它指向新分配的内存块。

int *pointer=  new int;  //用new创建一个int类型的内存,占用四个字节的空间

*pointer = 110;

std::cout << *pointer;

delete pointer;

(因为程序不会自动释放内存,程序中的每一个new操作都必须有一个与之对应的delete操作)

 

 

虚方法

声明一个虚方法的语法,只要在其原型前边加上virtual保留字即可。

virtual void play();

cat 和 dog在编译时都是Pet类型指针,编译器就认为两个指针调用的play()方法是Pet::play()方法,因为这是执行起来最快的解决方案。

为了让编译器知道它应该根据这两个指针在运行时的类型而有选择地调用正确的方法(Dog::play()和Cat::play()),我们必须把这些方法声明为虚方法

#include <iostream>
#include <string>
 
class Pet
{
public:
	Pet(std::string theName);
	
	void eat();
	void sleep();
	virtual void play();
	
protected:
	std::string name;
};
 
class Cat : public Pet
{
public:
	Cat(std::string theName);
	
	void climb();
	void play();
};

class Dog : public Pet
{
public:
	Dog(std::string theName);
	
	void bark();
	void play();
};
 
Pet::Pet(std::string theName)
{
	name = theName;
}

void Pet::eat()
{
	std::cout << name << "正在吃东西!\n";
}

void Pet::sleep()
{
	std::cout << name << "正在睡大觉!\n";
}

void Pet::play()
{
	std::cout << name << "正在玩儿!\n";
}

Cat::Cat(std::string theName) : Pet(theName)
{
}

void Cat::climb()
{
	std::cout << name << "正在爬树!\n";
}

void Cat::play()
{
	Pet::play();
	std::cout << name << "玩毛线球!\n";
}

Dog::Dog(std::string theName) : Pet(theName)
{
}

void Dog::bark()
{
	std::cout << name << "旺~旺~\n";	
}

void Dog::play()
{
	Pet::play();
	std::cout << name << "正在追赶那只该死的猫!\n";
}
 
int main()
{
	Pet *cat = new Cat("加菲");
	Pet *dog = new Dog("欧迪");
	
	cat->sleep();
	cat->eat();
	cat->play();
	
	dog->sleep();
	dog->eat();
	dog->play();
	
	delete cat;
	delete dog;
	
	return 0;
}

 

#include <iostream>

class animal
{
public:
	void sleep()
	{
		std::cout << "animal sleep" << std::endl;
	}
	virtual void breathe()
	{
		std::cout << "animal breathe" << std::endl;
	}
};

class fishc : public animal
{
public:
	void breathe()
	{
		std::cout << "fish bubble" << std::endl;
	}
};

int main()
{
	fishc fh;
	animal *pAn = &fh;
	
	pAn -> breathe();
	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值