C++ 属性变量

#include "stdafx.h"
#include<iostream>
#include <string>

using namespace std;

//枚举类型
enum Gender
{
	Male,
	Female
};

//结构体
struct Student
{
	string name;
	int age;
	Gender gender;
};



int main()
{
	/*int i;
	cout << "Hello" << endl;  //输出
	cin >> i;                 //输入
	cout << i << endl;*/

	//整形数据
	int score = 100;
	short age = 17;
	long money = 1000000000;
	cout << score << "/" << age << "/" << money << "/" << endl;  //100/17/1000000000/

	//浮点型数据
	float weigt = 12.4f;
	double pai = 3.1415926;

	//布尔类型  true 为 1  fals 为 0
	bool isPassed = true;
	cout << isPassed << endl;         //1
	//字符类型
	char c = 'a';
	cout << c << endl;                //a

	//数组   //初始化不赋值默认为0
	int arr1[5] = { 1,2,3,4 };
	cout << arr1[0] << "/" << arr1[4] << endl;   //  1/0
	int arr2[3]{ 1,2 };

	//字符串
	string name = "Stuandy";
	cout << name << endl;   //Stuandy

	//结构体
	Student stu1 = { "jan",20,Female };
	cout << stu1.name << "的年龄:" << stu1.age << endl;   //jan的年龄:20

	//枚举类型
	Gender g = Male;

	//指针
	int *pi = &score;
	cout << "地址:" << pi << "/" << "指向的对象的值:" << *pi << endl;   //地址:007DFE5C/指向的对象的值:100
	cout << "地址:" << &score << "/" << "指向的对象的值:" << score << endl;  //地址:007DFE5C/指向的对象的值:100

	*pi = 200;   //可通过地址修改该地址指向数据的值
	cout << "score:" << score << endl;    //score:200

	//算数运算符
	int num1 = 15, num2 = 4;
	//20 10 75 3 0
	cout << num1 + num2 << " " << num1 - num2 << " " << num1 * num2 << " " << (float)num1 / num2 << " " << num1 % num2 << " " << endl;  //19 11 60 3.75 3

	//关系运算符
	cout << (num1 == num2) << " " << (num1 > num2) << " " << (num1 <= num2) << " " << (num1 != num2) << endl;  //0 1 0 1

	//逻辑运算符
	cout << ((num1 == num2) && (num1 > num2)) << endl;   //0
	cout << ((num1 != num2) && (num1 > num2)) << endl;   //1
	cout << ((num1 == num2) || (num1 > num2)) << endl;   //1
	cout << ((num1 != num2) || (num1 > num2)) << endl;   //1
	cout << ((num1 == num2) || (num1 <= num2)) << endl;   //0
	cout << (!(num1 == num2)) << endl;                    //1

	//条件运算符
	int max = num1 > num2 ? num1 : num2;
	cout << num1 << "和" << num2 << "中较大的值为" << max << endl;    //15
	int min = num1 < num2 ? num1 : num2;
	cout << num1 << "和" << num2 << "中较大的值为" << min << endl;    //4 

	//if语句
	if (num1 > num2)
	{
		cout << num1 << "和" << num2 << "中较大的值为" << num1 << endl;    //15
	}
	else if (num1 < num2)
	{
		cout << num1 << "和" << num2 << "中较小的值为" << num2 << endl;    //4
	}
	else
	{
		cout << num1 << "和" << num2 << "相等" << endl;
	}

	//switch
	switch (stu1.gender)
	{
	case  Male:
		cout << stu1.name << "是男生" << endl;
		break;
	case Female:
		cout << stu1.name << "是女生" << endl;
		break;
	default:
		break;
	}

	//for 循环
	for (int i = 0; i < 5; i++)
	{
		cout << arr1[i] << " ";
	}
	cout << endl;

	//while循环
	while (num1 >= num2)
	{
		num1 -= 2;
		cout << num1 << "";
	}
	cout << endl;

	//do while 循环
	//do
	//{
	//	num1 -= 2;
	//	cout << num1 << "";
	//} while (num1 >= num2);
	//cout << endl;


	return 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
发出的红包

打赏作者

Cool-浩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值