C++(二)

构造函数

可以有多个,重载

complex(double r,double i):re(r),im(i){		// initialization list  初始化
}											// only for constructor

构造函数放在 private,外界就不能创建对象

const member functions

不会改变数据的函数,要习惯的加上 const

double real() const{return re;}		//  对不会改变数据的函数,要习惯 加上const
double imag() const{return im;}

如果不加 const
const complex c1(2,1);	// 常对象
cout<<c1.real();		// Error,只能访问 const 修饰的成员	

this pointer

成员函数有一个隐藏的参数,this pointer,编译器会自动帮我们写

因为有这个东西,所以可以在函数里面去用它

double real() const{
    return this->re;	// 也可以 return re; 编译器会自动补充上
}

static 成员

static 成员 和对象是脱离的,不属于对象

static 数据 要在类外 给 definition double Account::m_rate=8.0;

static 函数 和 一般的函数 的差别是static 函数 没有 this pointer,所以只能处理static数据

友元

友元函数:一个类的友元函数可以访问这个类的私有成员
友元函数不是这个类的成员函数,是这个类的朋友。

class CCar;	// 声明 CCar类,方便CDriver类里使用 

class CDriver{
public:
	void ModifyCar(CCar *p);
}; 

class CCar{
private:
	int price;
// 进行声明 
friend int Most_Expensive_Car(CCar cars[],int total);
friend void CDriver::ModifyCar(CCar *p);
};


void CDriver::ModifyCar(CCar *p){
	p->price+=1000;		// 友元函数里可直接访问 私有变量 
}

int Most_Expensive_Car(CCar cars[],int total){
	for(int i=0;i<total;i++){
		if(cars[i].price>tem){
			tem=cars[i].price;		// 直接访问私有成员 
		}
	}
}

友元类:如果A是B的友元类,则A的成员函数 可以访问 B类的私有成员。

class CCar{
private:
	int price;
friend class CDriver;		// 声明 友元类 
}; 

class CDriver{
public:
	CCar myCar;	
	void ModifyCar(){
		myCar.price+=1000;		// OK 
	}
};
// 如果 CDriver 不是 CCar 的友元,尽管定义了myCar,也不能 访问其私有成员。

程序中的友元关系是单向的。

namespace

为了解决 名字冲突的问题,namespace作为附加信息来区分不同库中相同名称的函数、类、变量等。

使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

c++的命名空间namespace

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值