C++学习笔记(一)

C++学习笔记

提示:本笔记是个人学习侯捷C++课程的总结笔记,欢迎来信指正批评!
第一篇 C++基础以及编程规范(一)



提示:以下是本篇文章正文内容,下面案例可供参考

一、防卫式声明

#ifndef __COMPLEX__
#define __COMPLEX__
……

#endif

若之前未定义COMPLEX时,定义并执行中间代码;若之后再定义COMPLEX时,不会再次定义执行中间代码。

二、头文件布局

头文件布局涵盖:前置声明、类的声明、类的定义。

类的声明和定义

类的声明:

class complex
{
public:
	……
	/*函数声明,未定义*/
	complex& operator+= (const complex&);
	/*函数若在class body中定义函数,便自动候选为inline,是否为inline最终由编译器决定*/
	double real () const {return re;}
	double imag () const {return im;}
private:
	double re,im;
	……
};

对于不会改变数据内容的函数,一定要加上const修饰符;否则对于常量对象会有异常报错。

{
	const complex c1(2,1);
	cout<<c1.real();
}

对于常量c1,存在矛盾逻辑,c1常量无法改变值;但是函数定义若无const意为可以改变,故存在矛盾。


三、模板

template<typename T>
class complex
{
public:
	……
private:
	T re,im;
	……
};
{
	/*使用时将c1和c2分别用double和int进行定义*/
	complex<double> c1(2.5,1.5);
	complex<int> c2(2,6);
}

四、访问级别

public:需要外界可以访问
private:只有class内部可以访问,一般数据都需要写在这部分,函数看需求
protect:类内和子类可直接访问,也就是说,基类中有protected成员,子类继承于基类,那么也可以访问基类的protected成员,要是基类private成员,则对于子类也是隐藏的,不可访问。

{
	complex c1(2,1);
	/*错误:re,im属于私有变量,不可直接访问*/
	cout<<c1.re;
	/*正确:通过public中的函数去返回变量值*/
	cout<<c1.real();
}

五、构造函数

1.写在public部分,函数名与class名相同,没有返回类型

complex (double r=0,double i=0)
	: re(r),im(i)  /*初值列,只能在构造函数中使用,效率较高 */
	{ }

2.构造函数可以有很多个(重载)

class complex
{
public:
/*重载函数1*/
complex (double r=0,double i=0)
	: re(r),im(i) { }
/*重载函数1,错误,因为之前有默认参数,不可在定义无参函数,因为可能存在冲突*/
complex (): re(0),im(0) { }
/*重载函数2,该函数返回re*/
double real () const {return re;}
private:
	……
};
/*重载函数2,该函数是给re赋值*/
void real(double r) { re=r;}

六、参数传递和返回值传递

class complex
{
public:
	complex (double r=0,double i=0): re (r),im(i)
	{}
	/*前面有引用符号,return by reference*/
	complex& operator += (const complex&);
	/*前面无引用符号,return by value*/
	double real () const {return re;}
private:
	double re,im;
	friend complex& __doapl(complex*,const complex&);
}

1.参数传递

{
	/*传值,传递副本,修改不影响原值*/
	complex c1(2,1);
	complex c2;
	/*传递引用可以加快传值速度,const可以防止函数对于参数的修改*/
	c2+=c1;
	cout<<c2;
}

2.返回值传递

{
	/*前面有引用符号,return by reference*/
	complex& operator += (const complex&);
	/*前面无引用符号,return by value*/
	double real () const {return re;}
}

在可以使用返回值引用传递的前提下尽量使用返回值引用传递。
如果函数中存在临时定义变量,在函数结束时该local变量释放故不可引用传递该local变量,故此时返回值传递若为引用则会出错。

六、friend友元

友元函数可以使用class中的私有变量,破坏了一定的封装性,但是速度有所提升。

class complex
{
public:
	……
private:
	……
	friend complex& __doapl(complex*,const complex&);
};
inline complex& __doapl (complex* ths,const complex& r)
{
	ths->re += r.re;
	ths->im += r.im;
	return *ths;
}

相同的class的各个object互为friend

int func(const complex& param)
{ return param.re+param.im; }

总结

C++提高效率的方法总结:
1.数据一定放在private中
2.参数尽可能使用引用传递,看状况选择是否加const
3.返回值尽量以引用传递
4.类的body中的函数,一定先考虑是否加const
5.构造函数一定使用初始列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值