`
java-mans
  • 浏览: 11432803 次
文章分类
社区版块
存档分类
最新评论

c++设计与编程之包含关系(包容关系)

 
阅读更多
在使用包含内容的时候,对于表示类X的对象,存在着两种主要的可选方式:
1生命一个类型为X的成员
2生命一个类型为X*或者X&的成员
如果指针值绝不改变,那么除了效率问题和写构造函数,析构函数的方式之外,这些选择方案是完全等价的:
class X{
public:
X(int);
};
class C{
X a;
X *p;
X &r;
public:
C(int i,intj,int k):a(i),p(new X(j)),r(*new X(k)){}
~C(){delete p;delete &r;}
}
1包含指针
#include<iostream>
#include<string>
using namespace std;
class Person{
public:
 Person(string name,int age){
  this->name=name;
  this->age=age;
 }
 Person(){}
 virtual void show(){
  cout<<name<<" "<<age;
 }
private:
 string name;
 int age;
};
class Student{
public:
 Student(string name,int age,string number1):p(new Person(name,age)),number(number1){}
 Student(){}
 void show(){
  p->show();
  cout<<" "<<number<<endl;
 }
private:
 string number;
 Person *p;
};
int main(){
 Student s("zhang",22,"091150");
 s.show();
 system("pause");
 return 0;
}

2包含对象
#include<iostream>
#include<string>
using namespace std;
class Person{
public:
 Person(string name,int age){
  this->name=name;
  this->age=age;
 }
 Person(){}
 virtual void show(){
  cout<<name<<" "<<age;
 }
private:
 string name;
 int age;
};
class Student{
public:
 Student(string name,int age,string number1):p(name,age),number(number1){}
 Student(){}
 void show(){
  p.show();
  cout<<" "<<number<<endl;
 }
private:
 string number;
 Person p;
};
int main(){
 
 Student s("zhang",22,"091150");
 s.show();
 system("pause");
 return 0;
}
3包含引用
#include<iostream>
#include<string>
using namespace std;
class Person{
public:
 Person(string name,int age){
  this->name=name;
  this->age=age;
 }
 Person(){}
 virtual void show(){
  cout<<name<<" "<<age;
 }
private:
 string name;
 int age;
};
class Student{
public:
 Student(string name,int age,string number1):number(number1),p(*new Person(name,age)){}
 Student():p(*new Person()){}  //这步不能少,一定得初始化
 void show(){
  p.show();
  cout<<" "<<number<<endl;
 }
 
private:
 string number;
 Person &p;
 
};
int main(){
 
 Student s("zhang",22,"091150");
 s.show();
 system("pause");
 return 0;
}
特别注意包含指针和引用指针,要new一个,最好加多一个析构函数delete删除一个,包含引用的时候,别忘了初始化。
分享到:
评论

相关推荐

    C++编程思想.pdf

    《C++编程思想》,原名《Thinking in C++》,作者:Bruce Eckel,翻译:刘宗田等,出版社:机械工业出版社,ISBN:7111071166,pdf 格式,大小 4MB。本资源仅包括前七章的内容。 内容简介: 本书作者根据自己学习C++...

    游戏编程入门到精通

    本书以C语言游戏编程入手,以102个实例,近200个函数较为系统地介绍了C基于游戏编程与开发的方法与技巧,内容丰富并相互包容,相互渗透。以实际的基于不同平台的游戏制作为背景,知识阐述与实际案例相结合,深入浅出...

    Thinking in c++ 中文版

    Thinking in C++ 中文版电子教案,共18章及3个附录,主要内容包括对象的演化、隐藏实现、函数重载与缺省参数、常量、命名控制、运算符重载、继承和组合、模板和包容器类、异常处理等,内容丰富,实用性强,欢迎高校...

    MFC Windows程序设计(第2版修订版)--源代码

     像我的许多同行一样,我学习Windows编程是从读Petzold的书《Windows程序设计》——一本所有Windows程序员都使用的Windows编程圣经——开始的。在刚刚成为一名MFC程序员时,那天我冲进书店,想买一本能够与...

    vc++ 开发实例源码包

    内部包含了atl控件的开发以及如何应用,演示了COM的包容与集合、自动化、事件和连接点、枚举器和集合以及线程管理等等。 ATL实现的CDHtmlDialog模板类v1.03 使用了六个类五个模块类演示了atl的调用方法 class ...

    MFC Windows程序设计(第2版修订版)--详细书签版1卷

     像我的许多同行一样,我学习Windows编程是从读Petzold的书《Windows程序设计》——一本所有Windows程序员都使用的Windows编程圣经——开始的。在刚刚成为一名MFC程序员时,那天我冲进书店,想买一本能够与...

    MFC Windows程序设计(第2版修订版)--详细书签版2卷

     像我的许多同行一样,我学习Windows编程是从读Petzold的书《Windows程序设计》——一本所有Windows程序员都使用的Windows编程圣经——开始的。在刚刚成为一名MFC程序员时,那天我冲进书店,想买一本能够与...

    vc++ 应用源码包_6

    Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与...

    phd_resources:我的博士的个人资源,侧重于贝叶斯推理和不同的编程语言

    该存储库包含各种各样的链接,这些链接对我的当前研究非常有用。 贝叶斯的东西 杂项机器学习 概率统计 R Julia python c++ Coursera 还要别的吗 会议和暑期学校(每年发生) 程式设计 统计与ML 多元化奖学金 ...

    vc++ 应用源码包_3

    Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与...

    vc++ 应用源码包_1

    Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与...

    vc++ 应用源码包_5

    Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与...

    vc++ 应用源码包_2

    Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与...

    超爽的自学课件(java)

    1) 第1章:对象入门 这一章是对面向对象的程序设计(OOP)的一个综述,其中包括对“什么是对象”之类的基本问题的回答,并讲述了接口与实现、抽象与封装、消息与函数、继承与合成以及非常重要的多形性的概念。...

    vfp6.0系统免费下载

    在此站点上不仅有新的产品公告,而且还提供了产品的更新信息、技术文章、白皮书、专业开发人员设计的优秀示例、会议公告、以及与其他许多 FoxPro web 站点的各种链接。 问题 1-3: 如何获得技术支持,以及如何报告...

Global site tag (gtag.js) - Google Analytics