Oba's Google Style

本文介绍了一套C++编码风格指南,包括代码格式、命名规范、注释习惯等内容,并提供了一个具体的类实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么起这个名字呢,是突发了coding style的兴趣,于是搜了搜,整理一套自己的style。

下面先用于C++,如果要是以后新的语言C#等再说。

1. curly bracks放在同一行,这样减少行数,看起来简单。

2. function name用camel convention。

3. variable: 全局g_xxx,member in class xxx_,local用小写加underscore。

4. *和& 紧跟在symbole的前面,因为char* p1, p2//p1是指针而p2却还是char type,防止这个事情发生。

5. indentation用两个,简单方便。

6. 用空格的地方:

foo (int i); //between function name and the parenthesis

foo (int value) : data (value), next (NULL) {}

for ( int i = 0; i < s.length(); i++ ) {}

int main (int argc, char *argv []) {} //no space in empty brackets

int foo () { return 1; } //space near brackets, same Enum

return DoSomething(argument1, argument2, argument3); // No Space at function calls

7. 为了防止多余的include,forward declaration可以用。因为目前程序量不大,prefer在前面定义并实现class。

forward declaration为了防止没有被定义,从刚开始学的时候就是这样。

8. Comments放在相应的上边,短用//,长用/* */ 

9. Conditions: 如果只有一行,不用brackets。

if (condition) //no space near parenthesises
  DoSomething();  // 2 space indent.
if (condition) {
  DoSomething();  // 2 space indent.
}

10. Loop要注意每个case都配上break,一定要有default,如果empty loop body,要加{ }。

switch (var) {
  case 0: {  // 2 space indent
    ...      // 4 space indent
    break;
  }
  case 1: {
    ...
    break;
  }
  default: {
    assert(false);
  }
}

头文件里只定义,实现在分别的.cpp文件是因为防止被多个include之后太冗长。

Reference: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Naming

PS一段改过的代码:

#include <iostream>

using namespace std;

template <class T>
class LinkedNode {
 public: 
  LinkedNode(T value) : data_(value), next_(NULL) {}
  ~LinkedNode() {}
  T getValue() const { return data_; }
  LinkedNode *getNext() const { return next_; }
  void setValue (T value) { data_ = value; }
  void setNext (LinkedNode* value) { next_ = value; }

 private:
  LinkedNode *next_;
  T           data_;
};

template<class T>//using LinkedNode as node
class LinkedList {
 public:
  LinkedList() { head_ = NULL; rear_ = NULL; }
  ~LinkedList() {
    LinkedNode<T> *delete_me = head_;
	while (delete_me) {
	  LinkedNode<T> * next = delete_me->getNext();
	  delete delete_me;
	  delete_me = next;
	}
	head_ = NULL;
	rear_ = NULL;
  }

  LinkedNode<T> *search (T target) const {
	LinkedNode<T> *link_node_ptr = head_;
	while (link_node_ptr != NULL)	{
	  if (link_node_ptr->getValue() == target) 
		return link_node_ptr;
	  else
		link_node_ptr = link_node_ptr->getNext();
	}
	return NULL;
  }  

  bool addFront (T value) {
	LinkedNode<T> *newnode = new LinkedNode<T> (value);
	//if the list is empty
	if (head_ == rear_)
	  rear_ = newnode;
	newnode->setNext(head_);
	head_ = newnode;
	return true;
  }
  
  bool addRear (T value) {
	LinkedNode<T> *newnode = new LinkedNode<T> (value);
	//if the list is empty
	if (head_ == rear_)
	  head_ = newnode;
	else
	  rear_->setNext(newnode);
	rear_ = newnode;
	return true;
  }
  
  bool deleteNode (T target) {
	LinkedNode<T> *link_node_ptr = head_;
	LinkedNode<T> *delete_this_ptr = search(target);
	if (!delete_this_ptr)
	  return false;		
	//special case if it's the head
	if (delete_this_ptr == head_) {
	  head = delete_this_ptr->getNext();
	  delete delete_this_ptr;
	  return true; 
	}
	while (link_node_ptr->getNext() != delete_this_ptr)	{
	  link_node_ptr = link_node_ptr->getNext();
	}
	link_node_ptr->setNext( delete_this_ptr->getNext() );
	delete delete_this_ptr;
	return true;
  }

 private:
  LinkedNode<T> *head_;
  LinkedNode<T> *rear_;
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值