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使用 ...
随机推荐
- scrapy-爬取斗图
scrapy-爬取斗图代码 <一> 开局三连杀 1.创建run的文件
- 开源企业IM-免费企业即时通讯-ENTBOOST V2014.177 Windows版本号正式公布
ENTBOOST,VERSION 2014.177 LINUX 版本号公布.主要添加Android安卓手机开发接口.企业IM接口,JQUERY开发接口,PCclient部分BUG修正: 下版本号更新时 ...
- [转]C#连接操作mysql实例
本文转自:http://hi.baidu.com/zhqngweng/item/c4d2520cb7216877bfe97edf 第三方组件:Mysql.Data.dll说明:去官方网站下载Mysql ...
- java中那些已经有的好用轮子
后续补充 IOUtils http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/IOUtils.html ...
- oled模块的驱动芯片和pcb图
参考自:http://blog.sina.com.cn/s/blog_57ad1bd20102wtq8.html oled的驱动芯片是:SSD1306驱动芯片,这个芯片嵌入在屏幕里面,从外面看不出来, ...
- 【 2017 Multi-University Training Contest - Team 9 && hdu 6162】Ch’s gift
[链接]h在这里写链接 [题意] 给你一棵树,每个节点上都有一个权值. 然后给你m个询问,每个询问(x,y,a,b); 表示询问x->y这条路径上权值在[a,b]范围内的节点的权值和. [题解] ...
- Java中关于static语句块的理解
Java中关于static语句块的理解 一.static块会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法. 实例一 public class A{ String name ...
- JavaScript系列--JavaScript数组高阶函数reduce()方法详解及奇淫技巧
一.前言 reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值. reduce() 可以作为一个高阶函数,用于函数的 compose. reduce()方 ...
- 小小ARC造福无数码农
今天无意中看到非常久之前的一个项目,古老的语法规范,还有更让人战战兢兢"内存管理代码"! 在这不得不说OC中内存管理的三种分类: Mannul Reference Counting ...
- Android入门——Bitmap和BitmapFactory
我们都知道一个App的成败,首先取决于是否具有优秀的UI,而除了交互功能之外还需要丰富的图片背景和动画去支撑.在开发中我们应用到的图片不仅仅包括.png..gif..9.png..jpg和各种Draw ...