面向对象的知识要点

1、面向对象技术的基本概念

对象、类和继承

2、C++中的空类默认产生哪些类成员函数?

对于一个空类,编译器默认产生4个成员函数:默认构造函数、析构函数、拷贝构造函数和赋值函数。

3、类和结构结构

类和结构的区别:

class中变量默认是private,struct中变量默认是public。C++中的关键字struct是为了让C++编译器兼容以前用C开发的项目。

struct也可以有:构造函数、析构函数、之间也可以继承等等。

以下代码用struct实现:

#include<iostream>
using namespace std;

enum BREED {GOLDEN,CAIRN,DANDIE,SHETLAND,DOBERMAN,LAB};

struct Mammal
{
public:
	Mammal()
		:itsAge(2),itsWeight(5)
	{
	}

	~Mammal()
	{
	}

	int GetAge() const
	{
		return itsAge;
	}

	void SetAge(int age)
	{
		itsAge = age;
	}

	int GetWeight() const
	{
		return itsWeight;
	}

	void SetWeight(int weight)
	{
		itsWeight = weight;
	}

	void Speak() const
	{
		cout<<"\nMammal sound !";
	}

	void Sleep() const
	{
		cout<<"\n Shhh.I'm sleeping. ";
	}

protected:
	int itsAge;
	int itsWeight;
};

struct Dog : public Mammal
{
public:
	Dog()
		:itsBreed(GOLDEN)
	{
	}

	~Dog()
	{
	}

	BREED GetBreed() const
	{
		return itsBreed;
	}

	void SetBreed(BREED breed)
	{
		itsBreed = breed;
	}

	void WagTail() const
	{
		cout<<"Tail wagging...\n";
	}

	void BegForFood() const
	{
		cout<<"Begging for food...\n";
	}

private:
	BREED itsBreed;
};

int main()
{
	Dog fido;
	fido.Speak();
	fido.WagTail();
	cout<<"Fido is "<<fido.GetAge()<<" years old \n";

	return 0;
}

4、成员变量

哪一种成员变量可以在同一个类的实例之间共享?

静态成员变量在一个类的所有实例间共享数据。如果想限制对静态成员变量的访问,则必须把他们声明为保护型或私有型。不允许用静态成员变量去存放某一个对象的数据。静态成员数据是在这个类的所有对象间共享的。

5、静态成员变量的使用。代码如下:

#include<iostream>
 using namespace std;

 class Cat
 {
 public:
	 Cat(int age)
		 :itsAge(age)
	 {
		 HowManyCats++;
	 }

	 virtual ~Cat()
	 {
		 HowManyCats--;
	 }

	 virtual int GetAge()
	 {
		 return itsAge;
	 }

	 virtual void SetAge(int age)
	 {
		 itsAge = age;
	 }

	 static int GetHowMany()//静态成员函数
	 {
		 return HowManyCats;
	 }

 private:
	 int itsAge;
	 static int HowManyCats;//静态成员变量
 };

 int Cat::HowManyCats = 0;//静态成员变量的初始化

 void tele();

 int main()
 {
	 const int MaxCats = 5;
	 int i;
	 Cat* CatHouse[MaxCats];//声明对象数组
	 for(i=0; i<MaxCats; i++)
	 {
		 CatHouse[i] = new Cat(i);//初始化对象数组
		 tele();
	 }

	 for(i=0; i<MaxCats; i++)
	 {
		 delete CatHouse[i];//释放对象数组空间
		 tele();
	 }

	 return 0;
 }

 void tele()
 {
	 cout<<"There are "<<Cat::GetHowMany()<<" Cats alive!\n";
 }

6、初始化列表

初始化列表的初始化变量顺序是根据成员的声明顺序来执行的。示例代码如下:

#include<iostream>
#include<string>

using namespace std;

class Base
{
private:
//	int m_i;
//	int m_j;
	//如果将声明顺序改变一下,就会得到不同的结果
	int m_j;
	int m_i;
public:
	Base(int i)
		:m_j(i),m_i(m_j)//按声明的顺序初始化,故m_i会被赋予一个机值
	{
	}
	Base()
		:m_j(0),m_i(m_j)
	{
	}
	int get_i()
	{
		return m_i;
	}

	int get_j()
	{
		return m_j;
	}
};

int main()
{
	Base obj(98);
	cout<<obj.get_i()<<endl
		<<obj.get_j()<<endl;

	return 0;
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值