C++基础和规范化系列-1

C++是第一个被程序员广泛使用的面向对象的语言,其很多优点都被其它面向对象的语言(如java,python)用来借鉴,但要想写出规范性的代码,还需要掌握很多方法,本系列文章从C++的基础和规范化两个方面进行介绍。

C++基础

介绍

  • 编写C++ class--基于对象(Object Based)
  • 学习class之间的关系--面向对象(Object Oriented)
  • 推荐书籍C++ Primer(百科全书);Effiective C++(设计思维),STL库。

C++ vs. C

  • c中定义的数据是全局的,没有访问级别的限制。
  • 引入头文件

c++引入头文件使用、不使用后缀名.h都可以,原因是C++的发展,后缀名不一定是.h或.cpp,还有可能是.hpp,无后缀名或者其它形式,所以在引入库中的头文件时,无需添加后缀名。

c引入的头文件也可以去掉后缀名.h,但需要在前面添加“c”来标识。

C++类书写规范话的第一步(防止重复加载声明)

#pragma once //.h文件中添加该声明,防止重复加载
class ClassDefine
{
};

等同于如下方式

#ifndef CLASS_DEFINE    //.h文件中添加该声明,防止重复加载
#define CLASS_DEFINE

class ClassDefine
{
};

#endif

C++类头文件的结构

  • #define声明
  • 前置声明
  • 类声明
  • 类定义(也可以放在.cpp文件中)

inline-内联函数

#pragma once

class Complex
{
public:
	// 使用初始化赋值是规范化的一种表现
	// 执行效率高
	Complex(double r, double i)
		:re(r), im(i)
	{}

	// 声明同时直接定义函数,这样IDE会将该函数自动指定为inline函数的候选
	// inline函数执行效率高
	// 一般简单的函数才会变为inline,复杂的函数不会变为inline
	// 该函数是不是inline由IDE决定
	double getRe() const
	{
		return re;
	}

	double getIm() const 
	{
		return im;
	}

private:
	double re, im;
};

//主动声明为inline函数,具体情况和上述一致
inline double getIm(const Complex& x)
{
	return x.getIm();
}

类的相关知识

  • 访问级别
    • private, protect, public
  • 构造函数
    • 和类同名,无返回值。
    • 使用初始化列表方式可以提高效率。
    • 构造方法设置为private级别,是单例设计模式的常用方式。
  • 重载
  • 友元
    • 友元函数可以获取friend中的成员
    • 相同class的不同对象互为友元
  • 操作符重载
    • operator +():支持成员函数和全局函数两种方式。
    • 运算符重载,需要注意返回值类型(如cout<<"hello";--无需返回值,而cout<<"hello"<<"world";--这样连续使用就需要返回值)。

常量成员函数

成员函数不修改对象中的状态,可以设置为常量函数,这也是规范化的写法。

#include<iostream>

using namespace std;

class Image
{
public:
	Image(int width, int height)
	{
		m_width = width;
		m_height = height;
	}

	// 该函数不会改变对象的数据
	// 如果不声明为常量函数,const对象调用该函数,会报错。
	// main()方法中调用该函数会报错
	void info()
	{
		cout << "width= " << m_width << ", height= " << m_height << endl;
	}

private:
	int m_width;
	int m_height;
};


int main()
{
	const Image image1(10, 20);
	// 调用该方法会报错
	image1.info();
	
	system("pause");
	return 0;
}

value和reference

  • 传递参数
    • 尽量使用reference(by reference)
    • 如果不修改该对象,则设置为const(by reference to const)
  • 返回参数
    • 尽量使用reference
    • 局部新创建的对象,不能使用reference返回。
  • 传递者无需知道接受者是以reference的形式来接受,这样的特点使reference大大优化与指针

成员函数和全局函数

  • 成员函数有隐藏this变量,指向类对象本身。
  • 全局函数没有this变量。
  • 根据具体的情况进行选用(如在复数类中定义double+复数函数,定义全局函数较好)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值