C++类与对象入门2

C++类与对象入门2,第1张

C++类与对象入门2

      我在上一篇文章中已经对C++中类与对象开了一个小头,本章我们继续来探讨C++中关于类的一些知识点。

我在上一篇文章中提到了成员数据与成员函数,我们接下来讨论一下关于其中的一些细节。

正常而言,我们都会将成员数据放在private作用域下,将成员函数放在public作用域下,这时,我们可以通过成员函数对类内进行访问,所以成员函数就作为类的外部接口,例如下列代码:

class Person
{
public:
	void setname()
	{
		name = "张三";
	}
	void showname()
	{
		cout << name << endl;
	}
	void setpassword()
	{
		password = "123456";
	}
	void showpassword()
	{
		cout << password << endl;
	}

private:
	string name;
	string password;
};

我在这里定义了一个类,这个类的名字叫人类,这个类里面有两个成员属性,一个是姓名,一个是yhk密码,在public作用域下边有四个成员函数,分别用来设置(显示)姓名(yhk密码),虽然name和password都在private作用域下面,可是我依然可以通过类内的成员函数对它们进行赋值 *** 作和打印 *** 作,如果是在类外对private作用域下的成员进行访问,则是非法的。

看到这,有C语言经验的小伙伴可能看出来了,C++中的class和C中的struct(结构体)是十分类似的,那为什么C++还会保留结构体呢?这其实很大一部分是历史原因,C++为了保留对C的兼容,同时又为了支持面向对象编程,因此保留的struct,但是,class和struct还是有区别的,那就是他们的默认访问权限不同,class的默认访问权限是private,而sturct的默认访问权限是public,所以,我们在一些情况下使用struct,可以带来一定的便利,因为它的默认访问权限为public,这样我们就不需要在自己写一个成员函数对其内部进行访问的,但是由于struct终究还是面向过程的编程思想,因此我们在进行面向对象方法进行编程是,主要还是使用class。

我们可以看到上面的例子是将成员函数的实现写在类内的,这种方式在代码量极少的时候使用并无伤大雅,但是当代码量一大,这种方式就会让代码的可读性和结构变差,所以我这边教大家如何进行类内声明,类外定义的方法,这种方法也可以为日后的分文件编写提供便利,请看如下代码:

class Person
{
public:

	void setname();   //在类内声明函数
	
	void showname();
	
	void setpassword();
	
	void showpassword();
	
private:
	string name;
	string password;
};
void Person::setname()  //在类外定义函数
{
	name = "张三";
}
void Person::showname()
{
	cout << name << endl;
}
void Person::setpassword()
{
	password = "123456";
}
void Person::showpassword()
{
	cout << password << endl;
}

这里就需要用到一个新的语法,当我们在类外定义函数时(前提是类内有函数声明)

语法:函数返回值类型    类名::函数名(形参列表){   }

然后我们在大括号里面进行函数的实现。

当我们进行大项目编程时,我们就要利用分文件编写,分文件编写就要利用类内声明,类外定义这样的方法,这样我们的代码结构性强并且可读性高。

以上是关于成员函数的浅谈,读者只需要在入门时先掌握这些就足够了。

关于成员数据:

我们知道,C++中有内置的基本数据类型,比如int,float,double等等,这些都是我们常见的,并且这些都是可以作为类中的成员数据的,但是,并不止只有这些可以作为成员数据,别的类的对象也以作为本类成员数据使用,通常我们是将两个相关性高的两个类进行这样的 *** 作,例如:点类与圆类,我们知道,类包含着对象的属性,那我们现在想想,圆类有哪些属性呢?

不难发现,圆具有的属性有半径和圆心,而圆心是一个点,也就是说点类的一个对象可以作为圆类中一个成员,代码实现如下:

​class Point;

class Circle
{
public:
	void setR(int r);
	
	int getR();
	
	void setCenter(Point center);
	
	Point getCenter();
	
private:
	int m_R;

	Point m_Center;
};

我在这里定义了一个圆类,可以看到圆类中包含着点类中的一个对象(圆心),在这里,可能有细心的读者发现了我在代码中并没有定义点类,而是用了“前向引用声明”这项技术,也就是先告诉编译器,我们有这样一个类,只不过还没有定义,这样编译器就不会报错,读者可以自行尝试一下如果将第一行的代码删去将会发生什么,当我们有一个类中用到了别的类中的对象,有两种方法,一是将别的类(本例中的点类)的定义放在前面,二就是利用“前向引用声明”这个技术,这个很简单,很好理解。

下面有道例题,读者可以自行去尝试一下,用到的就是上文所讲的点类与圆类,题目额如下:

                     利用点类与圆类,判断点和圆的位置关系。

答案会在下一篇关于类与对象的文章公布。

以上均为作者原创作品,如需引用,请联系作者,谢谢。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4948396.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存