C++学习笔记--类和对象

C++学习笔记–类和对象

C++的核心是面向对象编程,面向对象的三大特性是:封装、继承、多态。其基本思想是:万事万物皆为对象,每个对象有其属性和行为。通过总结不同对象的属性和行为,抽象出类,也就是定义了对象的结构或者框架。针对类的定义和对象的使用,衍生出的继承和多态技术,让C++的面向对象编程更加灵活和强大。

1、类

(a)封装
通过封装,可以将属性和行为包装在一起,在类内的属性和行为统称为类的成员,属性可以称为成员属性。一个对象的行为抽象为函数进行表达,所以行为在类中称为成员函数。C++中通过权限控制对类的成员的访问。

class Player
{
public:
	void show_Info()
	{
		cout << this->m_name << " " << this->m_age;
	}
	void Play(){}
private:
	string m_name;
	int m_age;
};

上述代码封装了一个Player类,其中定义了一个权限为公共(public)的show_Info()的成员函数,和两个权限为私有(private)的成员属性。公共意味着在类外可以访问,私有和保护(protected)则在类外不可访问。

(b) 继承
在实际的程序设计中,我们可能需要设计多个类,然而这多个类又是相互关联的。我们先前封装了一个Player类,假如现在需要设计一个类,这个类包含Player的一些属性,如果重新在这个类中封装Player中已有的属性,那么将会导致重复工作,这就违背了面向对象的原则,因此,C++提供继承这种方式来避免这种重复工作。

class SpeakPlayer: public Player //以公共权限继承Player中可继承的属性
{
	
private:
	 string m_title;
	 string speech_type;
};

上述代码定义的演讲选手,以公共权限的的方式继承了Player中的show_Info()和Play()成员。根据这种继承关系,Player被称为父类(或者基类),SpeakPlayer则被称为Player的子类(或派生类)。
(c ) 多态
通常同一个父类可以有多个子类,多个子类中继承了父类的某个成员,但是这个成员会由于子类不同而不同。对于父类来说,这是同一种行为,但是对子类来说,他们的行为与别的类的行为是不一样的。例如:Player这个类中有一个成员是show_Info(),SpeakPlayer继承了这个成员,但是如果存在另一个类,BasketPlayer继承show_Info()时,这两个子类明显会对同一个类型的行为产生不一样的结果:SpeakPlayer执行show_Info()会展示演讲比赛参赛者的姓名、年龄、演讲题目等,BasketPlayer执行show_Info()会展示篮球运动员的姓名、年龄、身高、所属球队、冠军数量等。

//这里引用钱能老师的《C++程序设计教程》通用版的ch17.3节的一个例子进行说明。
#include<iostream>
using namespace std;

//定义基类
class Base
{
public:
	virtual void fn()
	{
		cout << "In Base class\n";
	}
};

//定义派生类
class SubClass
{
public:
	virtual void fn()
	{
		cout << "In SubClass\n";
	}
}
void test(Base& b)
{
	b.fn()
}

int main()
{
	Base bc;
	SubClass sc;
	cout << "calling test(bc)" << endl;
	test(bc);
	cout << "calling test(sc)" << endl;
	test(sc);
	system("pause");
	return 0;
}

运行结果为:

calling test(bc)
In Base class
calling test(sc)
In SubClass

其中具有多态性的成员函数用virtual来标志其为虚函数。这里子类在重载父类虚函数的时候,需要保持与父类虚函数返回值类型相同、参数类型相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值