C++ 类包含关系Demo 笔记
is-a关系 类包含关系
构造 拷贝构造函数 重载福值运营商 析构函数
动态内存分配和释放 new delete操作
static 数据成员
好友功能 重载输入>>输出<<操作符
#include<iostream>
#include <windows.h>
using namespace std; class person
{
private:
char *name;
int age;
public:
person()
{
//class memeber has default value is necessary (or error may occur in person& operator=(const person &ps) delete [] name )
cout << "call Person constructor() ..." << endl; name = new char[20];
strcpy(name,"NULL");
age = 0; }
person(char *n,int a)
{
cout << "call Person constructor(char *n,int a)..." << endl;
name = new char[strlen(n) + 1];
strcpy(name,n);
//name=n;//--error may ocurr when call ~person() delete[] name
age=a;
}
//
person(person &ps)
{
cout << "call Person copy constructor..." << endl; name = new char[strlen(ps.name) + 1];
strcpy(name,ps.name);
age = ps.age;
}
//
person& operator=(const person &ps)
{
cout << "call person operator=() ..." << endl; if(this == &ps)
return *this; delete []name; name = new char[strlen(ps.name) + 1]; strcpy(name,ps.name);
age = ps.age; return *this;//------return person &
} friend istream & operator>>(istream &is, person &ps);//return value type : ---istream & friend ostream & operator<<(ostream &os,const person &ps); void show()
{
cout<<"name:" << name<<" age:"<<age << endl;
} ~person()
{
cout << "call person destructor..." << endl;
delete [] name;
}
}; istream & operator>>(istream &is, person &ps)
{
cout << "input name :" << endl;
is >> ps.name;
cout << "input age:" << endl;
is >> ps.age;
return is;
} ostream & operator<<(ostream &os,const person &ps)
{
os <<"name:" << ps.name<<" age:"<<ps.age << endl;
return os;
} class student
{
private:
person s;//include person class
static int sno;
char *grade;
int score;
public:
student()
{
cout << "Call student constructor()..." << endl; grade = new char[20];
strcpy(grade,"no");
sno++;
score=0;
}
student(char *n,int a,char *g,int sc):s(n,a)/*,grade(g)*/,score(sc)
{
cout << "call Student constructor(char *n,int a...)..." << endl;
sno++;
grade = new char[strlen(g) + 1];
strcpy(grade,g); cout<<"sno:" << sno << " score:" << score<< " grade: "<<grade<<endl;
} //the derived class also contains: dynamic memeory allocate //student(student &s1):s(s1.s)//-----:s(s1) [inner class]
student(student &s1)
{
cout << "Call Student copy constructor ..." << endl; s = s1.s;//------- sno=s1.sno+1;
score=s1.score;
grade = new char[strlen(s1.grade) + 1];
strcpy(grade,s1.grade); } student & operator=(const student &st)
{
cout << "call Student operator=() ..." << endl; if(this == &st)
{
cout << "this == &st" << endl;
return *this;
} delete [] grade; s = st.s;//-----------------------------
sno = st.sno;
score = st.score;
grade = new char[strlen(st.grade) + 1];
strcpy(grade,st.grade);
return *this; } friend istream & operator>>(istream &is,/*const */student &st)
{ operator>>(is,st.s);//输入内部对象成员的值 (调用内部类的友元函数--istream & operator>>(istream &,person &ps))
cout << "input sno: " << endl;
is >> st.sno;
cout << "input score:" << endl;
is >> st.score;
cout << "input grade:" << endl; is >> st.grade; return is; } friend ostream &operator<<(ostream &os,const student &st)
{
operator<<(os,st.s);//输出内部对象成员的值 (调用内部类的友元函数 --ostream & operator<<(ostream &,const student &st))
os<<"sno: " << st.sno<<" grade:"<<st.grade<<" score:"<<st.score<<endl;
return os; } void display()
{
s.show();
cout<<"sno: " << sno<<" grade:"<<grade<<" score:"<<score<<endl;
} ~student()
{
cout << "call student destructor ..." << endl;
delete [] grade; }
};
int student :: sno=2014001; void main()
{
cout << "test friend istream & operator>>() 。ostream & operator<<()... " << endl; person p;
cin >> p;
cout << p; // p.show(); cout << "-----------------" << endl; student s;
cin >> s;
cout << s; //s.display(); // system("pause");
student A("Tom",21,"Freshman",99);
A.display();
cout << "*************************" << endl; student B(A);
B.display(); cout << "*************************" << endl; person p1("li",25);
person p2;//
p2 = p1;
p2.show(); cout << "*************************" << endl;
student C = A;
C.display(); cout << "************************" << endl;
student D;
D = B;
D.display(); }
执行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGlzaGVudGFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
C++ 类包含关系Demo 笔记的更多相关文章
- Java程序设计(2021春)——第三章类的重用笔记与思考
Java程序设计(2021春)--第三章类的重用笔记与思考 本章概览: 3.1 类的继承(概念与语法) 3.2 Object类(在Java继承最顶层的类) 3.3 终结类和终结方法(只能拿来用,不可以 ...
- JavaFx 中常见的包和类(javafx笔记 )
JavaFx 中常见的包和类(javafx笔记 ) 更多详细内容请参考<Pro JavaFX 8>. javafx.stage 包包含以下类: Stage 类 Stage 类是任何 J ...
- Qt 串口类QSerialPort 使用笔记
Qt 串口类QSerialPort 使用笔记 虽然现在大多数的家用PC机上已经不提供RS232接口了.但是由于RS232串口操作简单.通讯可靠,在工业领域中仍然有大量的应用.Qt以前的版本中,没有提供 ...
- C++类的静态成员笔记
下面是C++类的静态成员笔记. 静态数据成员特征 用关键字static声明 为该类的所有对象共享,静态数据成员具有静态生存期 必须在类外定义和初始化,用(::)来指明所属的类 举例说明-具有静态数据成 ...
- java 构造方法 constructor demo笔记
demo 地址 http://pan.baidu.com/s/1bo2FG1T package com.ws.study; /** * @author Administrator * */ publi ...
- ILRuntime官方Demo笔记
调用/执行 热更中的方法 调用热更代码中方法,写在AppDomain中,记录一下主要几个方法: AppDomain.LoadAssembly 加载热更dll 执行热更代码的方法,有两种方式: appd ...
- Java中Object类的方法笔记
今天看了下Object类的源码,以下是我看源码的一些笔记,欢迎有小伙伴来补充~ 首先列举下几个主要方法(面试被问到过的): equals:这个主要是用于比较对象的,Object中比较的是比较原始的,直 ...
- python 面向对象(类)--学习笔记
面向对象是一种编程方式, 主要集中在类和对象的两个概念 python 中的类符合封装, 继承, 多态的特征 类 是一个模板, 是n多函数的集成 对象 是类的实例化 类的成员分为三大类:字段.方法.属性 ...
- 安卓Media相关类测试demo
最近在研究安卓系统给app开发者提供的标准Media相关的工具类,本人做了一些demo来测试这些工具的使用方法. 本demo包含若干apk源码,需要说明以下几点: 1. 构建方式 Makefile使用 ...
随机推荐
- 谈谈vector容器的三种遍历方法
说明:本文仅供学习交流.转载请标明出处.欢迎转载! vector容器是最简单的顺序容器,其用法相似于数组.实际上vector的底层实现就是採用动态数组.在编敲代码的过程中.经常会变量 ...
- amazeui学习笔记--css(常用组件3)--按钮组Button-group
amazeui学习笔记--css(常用组件3)--按钮组Button-group 一.总结 1.按钮组用法:把一系列要使用的 .am-btn 按钮放入 .am-btn-group . 2.按钮工具栏: ...
- PyCharm下载主题以及个性化设置(详细)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一.下载主题 1.在http://www.themesmap.com/theme.html上选择自己喜欢的主题点进去后进行下载. ...
- 洛谷——P1022 计算器的改良
https://www.luogu.org/problem/show?pid=1022#sub 题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在 ...
- [D3] Modify DOM Elements with D3 v4
Once you can get hold of DOM elements you’re ready to start changing them. Whether it’s changing col ...
- 系统学习java高并发系列一
转载请注明原创出处,谢谢! JAVA服务端或者后端需要大量的高并发计算,所以高并发在JAVA服务端或者后端编程中显的格外重要了. 首先需要有几个概念: 1.同步和异步 同步异步是来形容方法的一次调用的 ...
- open ball、closed ball 与 open set、closed set(interior point,limit point)、dense set
0. demo 在拓扑学上,open set(开集)是对实数轴(real line)上开区间(open interval)的拓展. 红色圆盘:{(x,y)|x2+y2<r2},蓝色圆圈:{(x, ...
- [WPF自定义控件库]排序、筛选以及高亮
1. 如何让列表的内容更容易查找 假设有这么一个列表(数据源在本地),由于内容太多,要查找到其中某个想要的数据会比较困难.要优化这个列表,无非就是排序.筛选和高亮. 改造过的结果如上. 2. 排序 在 ...
- hdu3377之简单路径求最值
Plan Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 一次svn数据库的崩溃错误的解决
作者:朱金灿 来源:. 然后再更新svn数据库,依然出现上面提到的错误.于是又想到新建一个svn数据库,然后将旧库备份出来再导入到新库中,运行命令:svnadmin dump E:\Repositor ...