一、题目描述

每个用户有用户编号(id),用户名(name),密码(passwd)三个属性。其中:

  • 用户编号(id)由系统自动顺序编号,用户名和密码都是字母、数字、符合的组合,新用户密码,默认“111111”。
  • User类所有对象有一个共有属性Current ID,用来记录当前已经被使用的最大id号(初始值999)。每当新增一个用户时,CurrentID的值加1,同时将这个值作为新用户的id号。

二、解答内容

//user.h

 #ifndef HEADER_U
#define HEADER_U
#include<string>
#include<iostream>
using namespace std; //User类声明
class User {
public:
void setInfo(string name0, string passwd0 = "", int id0 = );//支持设置用户信息
void changePasswd(); //支持修改密码
void printInfo(); //支持打印用户信息
User(){} //默认构造函数
User(const User &v); //复制最新用户信息
private:
int id;
static int CurrentID;
string name;
string passwd;
};
int User::CurrentID = ; //静态成员初始化 void User::setInfo(string name0, string passwd0, int id0) {
id = ++CurrentID;
name = name0;
passwd = passwd0;
} void User::changePasswd() {
string passwd1, passwdN;
int n = ;
cout << "Enter the old passwd:";
cin >> passwd1;
while (n <= ) {
if ( passwd == passwd1) {
cout << "Enter the new passwd:";
cin >> passwdN;
break;
}
else if (n < && (passwd != passwd1)) {
cout << "passwd input error,Please re-Enter again:";
cin >> passwd1;
n++;
}
else if (n == && (passwd != passwd1)) {
cout << "Please try after a while." << endl;
break;
}
}
} void User::printInfo() {
cout << "CurrentID:\t" << CurrentID << endl;
cout << "id:\t\t" << id << endl;
cout << "name:\t\t" << name << endl;
cout << "passwd:\t\t" << "******" << endl;
} User::User(const User &v):id(v.id),name(v.name),passwd(v.passwd){
printInfo();
} #endif

//User.cpp

 #include<iostream>
#include"user.h"
using namespace std; int main() {
cout << "testing 1......" << endl << endl;
User user1;
user1.setInfo("Leonard");
user1.printInfo(); cout << endl << "testing 2......" << endl << endl;
User user2;
user2.setInfo("Jonny", "");
user2.changePasswd();
user2.printInfo(); cout << endl << "testing 3......" << endl << endl;
User userN(user2); system("pause");
return ;
}

效果如下:

三、题后小结

  1. 静态数据成员声明在类内,初始化在外部。
  2. setInfo函数的参数注意把id放于最后并设置默认参数。

User类 新增共有属性Current ID的更多相关文章

  1. id选择器、类选择器、属性选择器

    在网页编辑时,通常要对样式进行各种设置.我们借助CSS样式设计中的选择器,就能很好很方便的对它们进行管理和设置了. 今天,跟大家分享一下几个常用的选择器:id选择器.类选择器.属性选择器. id选择器 ...

  2. ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries...

    2015年6月17日 ECMAScript 6发布正式版本 前面介绍基本语法,  后面为class用法及属性方法.set.symbol.rest等语法. 一.基本语法:  1.         定义变 ...

  3. JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  4. HTML5新增的属性和废除的属性

    HTML5中,在新增加和废除很多元素的同时,也增加和废除了很多属性. 新增的属性 1.表单相关的属性 对input(type=text).select.textarea与button指定autofoc ...

  5. magento新增商品属性以及将属性加入Flat table

    magento的EAV模型非常强大且灵活,但是如果不做优化的话,性能会非常低,因为attributes都存放在附表里,要获取一个entity的attribute,需要表联结一次,如果需要获取多条att ...

  6. Java生鲜电商平台-生鲜电商中商品类目、属性、品牌、单位架构设计与实战

    Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战 说明:Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战经验分享 凡是涉及到购物,必然是建立在商品的基础 ...

  7. Implement Custom Business Classes and Reference Properties实现自定义业务类和引用属性(EF)

    In this lesson, you will learn how to implement business classes from scratch. For this purpose, the ...

  8. 实体类的枚举属性--原来支持枚举类型这么简单,没有EF5.0也可以

    通常,我们都是在业务层和界面层使用枚举类型,这能够为我们编程带来便利,但在数据访问层,不使用枚举类型,因为很多数据库都不支持,比如我们现在用的SqlServer2008就不支持枚举类型的列,用的时候也 ...

  9. 福利->KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型

    我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型 ...

随机推荐

  1. oracle忘记密码,修改密码

    1:输入命令: sqlplus /nolog ,进入oracle控制台,并输入 conn /as sysdba;以DBA角色进入.2:若修改某一个用户密码, 修改用户口令 格式为:alter user ...

  2. php 伪协议探究

    0x01序 PHP伪协议探究 php中支持的伪协议有下面这么多 file:// — 访问本地文件系统 http:// — 访问 HTTP(s) 网址 ftp:// — 访问 FTP(s) URLs p ...

  3. Quartz2D Text

    [Quartz2D Text] Quartz 2D provides a limited, low-level interface for drawing text encoded in the Ma ...

  4. 为什么不加WWW的域名能访问,前面加了WWW后不能访问?

    解决方法:我的主机记录没有添加www,添加后就可以访问了

  5. [GO]conext的使用

    package main import ( "context" "time" "net/http" "fmt" &quo ...

  6. raw格式转换成qcow2格式

    qemu-img convert -f raw redhat6.7-kvm-postgresql9.2.3-8disk-pulsar2.2 -O qcow2 redhat6.7-kvm-postgre ...

  7. ScreenCapture-HDwik5.0整合教程

    示例下载:http://yunpan.cn/Q9qzFmf6sF57z 1.上传ScreenCapture文件夹 2.上传upload.php文件 2.1修改upload.php路径 3.修改Scre ...

  8. 从原理上理解Base64编码

    开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该.大概介绍一下Base64的相关内容,花几分钟时间 ...

  9. RSA加密解密总结

    简单的控制台程序 #include"stdafx.h" #include <math.h> #include<string.h> /*/求解密密钥d的函数( ...

  10. java.util.concurrent.locks.LockSupport (讲得比较细)

    转自:   https://my.oschina.net/readjava/blog/282882   摘要: 要学习JAVA中是如何实现线程间的锁,就得从LockSupport这个类先说起,因为这个 ...