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

97 篇文章 0 订阅
92 篇文章 0 订阅
在使用包含内容的时候,对于表示类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删除一个,包含引用的时候,别忘了初始化。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值