【C++】类的属性和行为

        欢迎来到博主 Apeiron 的博客,祝您旅程愉快 !时止则止,时行则行。动静不失其时,其道光明。


目录

1、缘起

2、封装

3、总结


1、缘起

        C++ 面向对象的三大特性为:封装,继承和多态。C++ 认为 万事万物皆为对象,对象有其 属性行为

例如:

        人可以作为对象,属性有姓名,年龄,身高,体重......,行为有唱,跳,rap 和篮球......;

        车可以作为对象,属性有轮胎,方向盘,车灯......,行为有载人,放音乐,放空调......;

        猫可以作为对象,属性有毛色,品种,体型......,行为有吃鱼,抓老鼠,翻垃圾桶......

具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类,猫属猫类

        类中的属性和行为,我们统一称为 成员,属性又称为 成员属性成员变量,行为又称为 成员函数成员方法。 

2、封装

语法:class  类名{ 访问权限:属性 / 行为 };

①  将属性和行为作为一个整体,表现生活中的事物

②  将属性和行为加以权限控制

在设计类的时候,属性和行为写在一起,表现事物。

示例 1 :设计一个圆类,求圆的周长

示例代码: 

#include<iostream>

using namespace std;

//圆周率
const double PI = 3.14;

//设计一个圆类,求圆的周长
class Circle
{
	//访问权限
public:

	//属性
    //圆的半径
	int r;

	//行为
	//获取圆的周长
	double Perimeter()
	{
		return 2 * PI * r;
	}
};

int main()
{
	//通过圆类,创建具体的圆(对象)
	Circle c;

	//给圆对象的属性进行赋值
	c.r = 10;

	cout << "圆的周长为:" << c.Perimeter() << endl;

	cout << endl;
	system("pause");
	return 0;
}

示例 2:设计一个学生类,输出学生的相关信息 

示例代码 1:

#include<iostream>
#include<string>

using namespace std;

//设计一个学生类,属性有姓名和学号,
//可以给姓名和学号赋值,可以显示学生的姓名和学号。
class Student
{
public:
	//属性
	string stu_name;
	string stu_school;
	string stu_id;
	string stu_major;

	//行为
	void print()
	{
		cout << "姓名:" << stu_name <<"    ";
		cout << "学校:" << stu_school << "    ";
		cout << "学号:" << stu_id << "    ";
		cout << "专业:" << stu_major << endl;
	}
};

int main()
{
	//创建一个学生实例
	Student s;

	//属性赋值
	s.stu_name = "张三";
	s.stu_school = "家里蹲大学";
	s.stu_id = "0001";
	s.stu_major = "干饭";

	//类的调用
	s.print();

	cout << endl;
	system("pause");
	return 0;
}	

示例代码 2 :通过成员函数给属性赋值 

#include<iostream>
#include<string>

using namespace std;

//设计一个学生类,属性有姓名和学号,
//可以给姓名和学号赋值,可以显示学生的姓名和学号。
class Student
{
public:
	//属性
	string stu_name;
	string stu_school;
	string stu_id;
	string stu_major;

	//行为
	void print()
	{
		cout << "姓名:" << stu_name <<"    ";
		cout << "学校:" << stu_school << "    ";
		cout << "学号:" << stu_id << "    ";
		cout << "专业:" << stu_major << endl;
	}

	//姓名赋值
	void SetName(string name)
	{
		stu_name = name;
	}

	//学校赋值
	void SetSchool(string school)
	{
		stu_school = school;
	}

	//学号赋值
	void SetId(string id)
	{
		stu_id = id;
	}

	//专业赋值
	void SetMajor(string major)
	{
		stu_major = major;
	}
};

int main()
{
	//创建一个学生实例
	Student s;

	//属性赋值
	s.SetName("张三");
	s.SetSchool("家里蹲大学");
	s.SetId("0001");
	s.SetMajor("干饭");

	//类的调用
	s.print();

	cout << endl;
	system("pause");
	return 0;
}	

3、总结

        本期的分享总结就到这里了,如果有疑问的小伙伴,我们在评论区交流嗷,笔者必回,我们下期再见啦 ! 

        

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C++中实现属性 本文译自http://www.codeguru.com/cpp_mfc/Property.html的Implementing a Property in C++ 以下是译文 本文由Emad Barsoum投稿。 开发测试环境:Visual C++ 7.0, Windows XP sp1, Windows 2000 sp3 摘要 本文试着在C++中不使用任何扩展技术模拟C#(或其他语言)中的属性特征。大多数在C++实现属性的库和编译器使用扩展技术,如Managed C++C++ Builder,或者他们使用如通常函数的set和get方法,但那不是属性。 详述 我们首先看一下什么是属性。一个属性表现为一个字段或者成员变量,但它通过read和write方法或者get和set方法暗中操作变量。 例如,若存在A和它的属性Count,我可以写如下的代码: A foo; Cout << foo.Count; 实际上Count调用它的get函数返回当前的变量值。你可以将属性定为只读(你可以读取它但不能修改它)、只写或者可读写,这就是使用属性而不直接使用变量的的一个最大好处了。好了,让我们开始来实现它: 我们需要能做如下的事: int i = foo.Count; //--调用get函数得到值 foo.Count = i; //-- 调用set函数设定值 因此,很明显的我们需要重载 = 操作符使其能设定变量的值,同时也要重载该属性的返回值(在下面我们将会看到的)。 我们将实现一个称为property的,它做的就像一个属性,声明如下: template class property {} 这个模板表示的是我们的属性。Container是我们要在其中包含属性变量,set和get方法以及属性型。ValueType是内部变量即要定义的属性型,nPropType定义属性的读写标志:只读、只写或可读写。 现在我们需要一个指向从包含属性Container到属性property的set和get方法的指针,同时重载 = 操作符以使得属性能象变量起那样作用。现在我们来看property的全部定义 #define READ_ONLY 1 #define WRITE_ONLY 2 #define READ_WRITE 3 template class property { public: property() { m_cObject = NULL; Set = NULL; Get = NULL; } //-- 将m_cObject指向包含属性的container -- void setContainer(Container* cObject) { m_cObject = cObject; } //-- 设定可改变属性值的set成员函数 -- void setter(void (Container::*pSet)(ValueType value)) { if((nPropType == WRITE_ONLY) || (nPropType == READ_WRITE)) Set = pSet; else Set = NULL; } //-- 设定可检索属性值的get成员函数 -- void getter(ValueType (Container::*pGet)()) { if((nPropType == READ_ONLY) || (nPropType == READ_WRITE)) Get = pGet; else Get = NULL; } //-- 重载 = 号操作符使其能用set成员设定属性值-- ValueType operator =(const ValueType& value) { assert(m_cObject != NULL); assert(Set != NULL); (m_cObject->*Set)(value); return value; } //-- 使属性能转换为内部型成为可能-- operator ValueType() { assert(m_cObject != NULL); assert(Get != NULL);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aperion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值