一、题目描述

每个用户有用户编号(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. Golang之方法(自定义类型,struct)

    方法的使用,请看本天师的代码 //Golang的方法定义 //Golang中的方法是作用在特定类型的变量上,因此自定义类型,都可以有方法,不仅仅是struct //定义:func (recevier ...

  2. YUI前端优化之内容篇

    Excetional Performance团队总结出了一系列可以提高网站速度的方法.可以分为7大类34条.包括内容.服务器.cookie.CSS.JavaScript.图片.移动应用等七部分.一.内 ...

  3. Basic4android v3.50 发布

    这次发布的主要是debug 的增强.说实话,在这一方面B4a 比delphi做的要好.希望delphi 在新的版本里面 能进一步加强. I'm happy to release Basic4andro ...

  4. CodeForces 686B Little Robber Girl's Zoo (构造冒泡排序)

    题意:给定一排列,让你通过一个区间交换的方式,完成排序. 析:这个题说了,最多不能超过20000次,而 n 最大才100,那么冒泡排序复杂度为 n * n,才10000,肯定是可以的,所以我们就模拟冒 ...

  5. HBase-1.2.1和Phoenix-4.7.0分布式安装指南

    目录 目录 1 1. 前言 2 2. 概念 2 2.1. Region name 2 3. 约定 2 4. 相关端口 3 5. 下载HBase 3 6. 安装步骤 3 6.1. 修改conf/regi ...

  6. 解决阿里云OSS跨域问题

    解决阿里云OSS跨域问题 现象 本人项目中对阿里云图片请求进行了两次,第一次通过img标签进行,第二次通过异步加载获取.第一次请求到图片,浏览器会进行缓存,随后再进行异步请求,保存跨域失效. 错误信息 ...

  7. java经典开发模式

    Java Web开发方案有多种可供选择,这里列举一些经典的开发模式进行横向比较,为Java Web的开发模式选择提供参考.除此之外还有好多方案(如Tapestry和Wicket等等)并不了解,这里就不 ...

  8. 咏南CS开发框架新的界面风格

    咏南CS开发框架新的界面风格 这种风格完全和WINDOWS桌面一样,符合用户的操作习惯. 我的桌面的图标和WINDOWS桌面一样分为二类:1)快捷方式  2)文件夹. 如果快捷方式较多,看得人眼花缭乱 ...

  9. 好用的下拉第三方——nicespinner

    1.简介 GitHub地址:https://github.com/arcadefire/nice-spinner Gradle中添加: allprojects { repositories { ... ...

  10. Replication--备份初始化需要还原备份么?

    测试场景:发布服务器:SQLVM6\SQL2订阅服务器:SQLVM5\SQL2分发服务器:SQLVM3\SQL2发布数据库:RepDB2订阅数据库:RepDB2发布:RepDB2_TB1 测试步骤:1 ...