编程之美C++
文章平均质量分 59
劲草浅躬行
笔落惊风雨不停,诗成泣鬼神经病
展开
-
C++ 编程规范-string类型的实现
1. string类型字符串存储方式的简单说明string实现方式:比较典型的有eager-copy(贪婪拷贝);copy-on-write(写时复制);small string optimization(短字符串优化)方式。string str1 = "I love China"string str2 = str1;printf("str1存储的地址:%p".str1.c_str())printf("str2存储的地址:%p".str2.c_str())可以看出采用eager-copy方式原创 2021-03-30 23:04:57 · 666 阅读 · 0 评论 -
C++ 编程规范-智能指针
shared_ptr智能指针实现的说明shared_ptr<int> myp(new int(5));int icount = myp.use_count(); // 某个对象有几个智能指针指向cout << "icout = " << icout << endl; // 输出1{ shared_ptr<int> myp2(myp); icount = myp2.use_count(); cout << "icout原创 2021-03-30 21:05:21 · 415 阅读 · 0 评论 -
C++ 编程规范-类定义的相互依赖与前向声明
类定义的相互依赖与前向声明A1与A2直接依赖,可能还会存在间接依赖,这些在程序中应该尽可能避免这种设计,而是引入一个新类,让A1和A2都依赖这个新类。// a1.hclass A1{public: A2* mpa2;}// a2.hclass A2{public: A1* mpa1;}如果已经存在这种依赖关系,那么可以通过前向声明来解决问题。类的前向声明并不是类的完整定义,有些情况下,必须要类的完整定义而并不是类的前向声明。比如在类A1中声明A2的对象在类A1的定义中原创 2021-03-30 20:03:25 · 693 阅读 · 0 评论 -
C++ 编程规范-命名空间的使用注意事项
命名空间的使用注意事项通过using声明命名空间的代码强烈建议不要放在.h文件中–命名空间被污染。也就是说如果想要通过using声明命名空间使用的,最好不要在xx.h文件中写using namespace语句,如果写进去的话,一旦命名有冲突,所有引用该头文件xx.h的文件都会报错。写到.cpp中去可能只会有该cpp文件才会报错。// a1.hnamesapce a1nsp{ class A {};}// a2.hnamesapce a2lnsp{ class A {};}//原创 2021-03-30 19:36:57 · 516 阅读 · 0 评论 -
C++ 编程规范-类设计中的技巧
1. 优先考虑为成员变量提供访问接口当需要对成员变量进行访问时,可以使用Private来修饰成员变量,然后提供一个public修饰的成员函数作为外接访问该变量的接口。class A1{public: int m_a;};class A2{public: int& getA() { return m_a; }private: int m_a;};A1 a1obj;a1obj.m_a = 3;A2 a2obj;a2obj.getA() = 5; // 左原创 2021-03-26 20:33:27 · 224 阅读 · 0 评论 -
C++ 编程规范-不能被拷贝构造和拷贝赋值的类对象
不能被拷贝构造和拷贝赋值的类对象A aobj1;A aobj2(aobj1); // 拷贝构造,产生新的对象A aobj3;aobj3 = aobj2; // 赋值构造,不产生新的对象如果想不能被拷贝构造 且 不能被拷贝赋值采用deleteclass A{public: A() {} A(const A& tmpobj) = delete; // c++11中增加 A& operator= (const A& tmpobj) = delete;}原创 2021-03-25 21:38:12 · 683 阅读 · 0 评论 -
C++ 编程规范-private继承
Private继承基础知识延伸:简单地说下C++类的3种继承方式,分别是public继承,protected继承,private继承。最常用的还是public继承。class默认的是private继承,它的member如果没写权限也是默认private。struct则相反,默认的是public继承。结合下面的图示和代码,对C++的继承就有了比较清晰的认识了。1. 父类引用子类 & 父类指针绑定子类public继承的时候,以下可行。也就是只有is-a关系的时候,才能采用父类引用绑定子类以原创 2021-03-25 20:10:45 · 3524 阅读 · 0 评论 -
C++ 编程规范-知识散点
pair & make_pair注意:使用pair与make_pair要包含头文件 #include < utility >pair实质上是一个结构体(类),make_pair是函数。pair主要的两个成员变量是first和second,这两个变量可以直接使用。初始化一个pair可以使用构造函数,也可以使用std::make_pair函数// 构造函数初始化一个pair对象pair <string,double> product1 ("tomatoes",3原创 2021-03-25 20:10:30 · 1830 阅读 · 0 评论 -
C++ 编程规范-public继承 & 类的组合关系
public代表的是一种is-a的关系,通过子类产生的对象也一定是一个父类对象。父类表现的是一种更泛化的概念,子类表现的是一种更特化的概念。比如Man是Human。检验规则,能够在父类对象上做的行为也必然能在子类对象上做,每个子类对象同时也是父类对象。1. 普通成员函数规则1:对于public继承,不建议也不应该用子类的普通成员函数遮蔽父类的同名普通成员函数。既然在父类中是普通成员函数,那么就代表在子类中不会有不同的行为,代表的是一种不变形。里氏替换原则:任何基类出现的地方,都可以无差别的用子类替.原创 2021-03-25 15:23:29 · 1227 阅读 · 0 评论 -
C++ 编程规范-拷贝构造函数和拷贝赋值运算符
拷贝构造函数和拷贝赋值运算符普通情况注意在默认情况下(用户没有定义,但是也没有显示的删除),编译器会自动隐式生成一个拷贝构造函数和赋值运算符,但用户可以使用delete来指定不生成拷贝构造函数和赋值运算符,这样的对象就不能通过值传递,也不能进行赋值运算。需要注意的是,拷贝构造函数必须以引用的方式传递参数,这是因为,在值传递给一个函数的时候,会调用拷贝构造函数生成函数的实参,如果拷贝构造函数的参数仍然是以值的方式,就会无限循环的调用下去,直到函数的栈溢出。void func(alpha); /原创 2021-03-14 21:01:32 · 1058 阅读 · 0 评论 -
C++ 编程规范-静态对象与全局对象的构造顺序
类和对象静态对象与全局对象的构造顺序类中的静态对象类中的静态成员对象,即使没有被使用,也会被构造和析构。比如B类中的m_sa(类类型的静态成员变量),也会被分配内存。如果m_sa不是类类型,而是简单类型,比如double, int,那么源码中如果没有用到这个静态成员变量,编译器可能不会分配内存。函数中的静态对象:如果该函数没被调用,那么这个静态对象不会被构造和析构。class A {public: A(); ~A();};class B{public: inline s原创 2021-03-14 17:44:17 · 824 阅读 · 0 评论 -
小飞的电梯调度法
小飞的电梯调度法。问题主要就是逐一从下往上查询,若人第i层,继续往上到i+1 层时,若满足N1+N2#include<fstream>#include<iostream>#include<stdlib.h>using namespace std;#define N 10int nperson[N]={0};void init(){ ifstream file("louceng.t原创 2016-06-25 15:30:46 · 409 阅读 · 0 评论 -
编程之美之买书问题理解和c语言程序
这是我的第一个博文,心情先小激动一下----------------------------分割线-----------------------------《编程之美》书中提到,用动态规划的方法比较好。假设x1,x2,x3,x4,x5分别为每一卷书的数量,因为书的价格是一样的,所以他们的顺序是不影响答案的。这里我们可以按照由大到小的顺序把它排序,即x1>=x2>=x3>=x4>=x5。书中原创 2016-06-16 21:34:13 · 900 阅读 · 0 评论