首页
学习
活动
专区
工具
TVP
发布

landv

专栏成员
384
文章
647829
阅读量
44
订阅数
undefined reference to `std::cout'等错误 undefined reference to `std::cout'等错误
(2)后缀名为.c的程序和.cpp的程序g++都会当成是c++的源程序来处理。而gcc不然,gcc会把.c的程序处理成c程序。
landv
2021-02-04
2.1K0
[linux][c++]linux c++ 通过xcb库获取屏幕大小
linux c++ 通过xcb库获取屏幕大小 #include <stdio.h> #include <xcb/xcb.h> /** clang++ main.cpp -o main `pkg-config --cflags --libs xcb` -lxcb-randr landv@win7-pc:~/Desktop$ ./main Informations of screen 416: width.........: 1920 height........: 1080 white pi
landv
2019-11-30
8.4K2
[golang][gui]Hands On GUI Application Development in Go
与其说是go之旅,不如说是C,计算机世界的霸主C语言,有人可能说是汇编(ASM)才是,亲我说的是高级语言哈。不要抬杠,很多语言都是基于C的,搞了很多类C语言。
landv
2019-11-13
1.1K0
[linux][c/c++]代码片段01
#include <stdio.h> #include <unistd.h> void usage() { printf("Usage:\n"); printf("\tOptDemo [-a] [-b] [-c message]"); } int main(int argc, char *argv[]) { int o; const char *optstring = "abc::"; // 有三个选项-abc,其中c选项后有两个冒号,表示后面可选参数 whi
landv
2019-11-10
6670
[nghttp2]压测工具,源码编译并进行deb打包过程
nghttp2下载地址:https://github.com/nghttp2/nghttp2
landv
2019-08-07
1.8K0
《挑战30天C++入门极限》C++类的继承与多重继承的访问控制
C++类的继承与多重继承的访问控制   在前面的练习中我们一直在使用public的继承方式,即共有继承方式,对于protected和private继承方式,即保护继承与私有继承方式我们并没有讨论。  对于单个类来说,讨论保护继承与私有继承的区别意义是不大的,他们的区别只在多级继承的情况中体现。   在这里我声明一下,对于此章节的内容不太适合用过多的文字进行描述,主要还是看例子,通过例子熟悉之间的关系,过多的文字描述会模糊读者思路。   例程如下(重要部分都做了详细说明):
landv
2019-07-15
5260
《挑战30天C++入门极限》C++面向对象编程入门:构造函数与析构函数
C++面向对象编程入门:构造函数与析构函数   请注意,这一节内容是c++的重点,要特别注意!   我们先说一下什么是构造函数。   上一个教程我们简单说了关于类的一些基本内容,对于类对象成员的初始化我们始终是建立成员函数然后手工调用该函数对成员进行赋值的,那么在c++中对于类来说有没有更方便的方式能够在对象创建的时候就自动初始化成员变量呢,这一点对操作保护成员是至关重要的,答案是肯定的。关于c++类成员的初始化,有专门的构造函数来进行自动操作而无需要手工调用,在正式讲解之前先
landv
2019-07-15
6510
《挑战30天C++入门极限》理解C++面向对象程序设计中的抽象理论
  为了更容易学习便于理解,我们的图例是以有两个小孩围成一圈,并且设置报数的数为1的情况来制作的。   上面的两种解决Josephus问题的解决办法从代码上来看,都属于一杆子到底的解法,第二种从结构表达上优于第一种,但是这两个都属于纯粹的过程式程序设计,程序虽然简短,但很难让人看懂,程序的可读性不高,在我们没有学习面向对象的编程之前,聪明的人可能会把各各步骤分解出来做成由几个函数来解决问题。   思路大致可以分为以下六个部分:   1.建立结构   2.初始化小孩总数,和数小孩的数   3.初始化链表并构成环链   4.开始通过循环数小孩获得得胜者   5.输出得胜者   6.返回堆内存空间   从表上看这个程序为了便于阅读可以写成六个函数来分别处理这六个过程,的确,这么修改过后程序的可读性是提高了一大步,但是有缺点仍然存在,程序完全暴露在外,任何人都可以修改程序,程序中的一些程序作者不希望使用者能够修改的对象暴露在外,各对象得不到任何的保护,不能保证程序在运行中不被意外修改,对于使用者来说还是需要具备解决Josephus问题算法的能力,一旦程序变的越来越很,,每一个参与开发的程序员都需要通读程序的所有部分,程序完全不具备黑盒效应,给多人的协作开发带来了很大的麻烦,几乎每个人都做了同样的重复劳动,这种为了解决一个分枝小问题写一个函数,最后由很多个解决局部问题的函数组合成的程序我们叫做结构化程序设计,结构化编程较过程化编程相比可读性是提高了,但程序不能轻易的被分割解决一个个大问题的模块,在主函数中使用他们的时候总是这个函数调用到那个函数,如果你并不是这些函数的作者就很难正确方便的使用这些函数,而且程序的变量重名问题带来的困扰也是很让人头痛的…… 那么面向对象的程序设计又是如何解决这些问题的呢?   面向对象的程序设计的思路是这样的:   程序 = 对象 + 对象 +对象..........   这么组合而来的   对于上面的josephus问题可以把问题分割成如下的方法进行设计(如下图所示)
landv
2019-07-15
3840
《挑战30天C++入门极限》C++类对象的复制-拷贝构造函数
C++类对象的复制-拷贝构造函数   在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a;   自己定义的类的对象同样是对象,谁也不能阻止我们用以下的方式进行复制,例如: #include <iostream> using namespace std; class Test { public: Test(int temp)
landv
2019-07-15
6800
《挑战30天C++入门极限》入门教程:实例详解C++友元
入门教程:实例详解C++友元   在说明什么是友元之前,我们先说明一下为什么需要友元与友元的缺点:   通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为public(共用的),然而这做带来的问题遍是任何外部函数都可以毫无约束的访问它操作它,c++利用friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作,避免把类成员全部设置成public,最大限度的保护数据成员的安全。   友元能够使得普通函数直接访问类的保护数据,避免
landv
2019-07-15
4300
《挑战30天C++入门极限》C++类静态数据成员与类静态成员函数
C++类静态数据成员与类静态成员函数   在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢?   这个问题便是本章的重点:   声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。   下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为protected(保护状态
landv
2019-07-15
6930
《挑战30天C++入门极限》C++面向对象编程入门:类(class)
C++面向对象编程入门:类(class)   上两篇内容我们着重说了结构体相关知识的操作。   以后的内容我们将逐步完全以c++作为主体了,这也意味着我们的教程正式进入面向对象的编程了。   前面的教程我已经再三说明,结构体的掌握非常重要,重要在哪里呢?重要在结构体和类有相同的特性,但又有很大的区别,类是构成面向对象编程的基础,但它是和结构体有着极其密切的关系。   我们在c语言中创建一个结构体我们使用如下方法: struct test { privat
landv
2019-07-15
6850
《挑战30天C++入门极限》新手入门:C/C++中的结构体
新手入门:C/C++中的结构体   什么是结构体?   简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。   定义
landv
2019-07-15
2560
《挑战30天C++入门极限》新手入门:C++中的函数重载
新手入门:C++中的函数重载   函数重载是用来iostream> using namespace std; int test(int a,int b); float test(float a,float b); void main() { cout << test(1,2) << endl << test(2.1f,3.14f) << endl; cin.get(); } int test(int a,int b) { return
landv
2019-07-15
4260
《挑战30天C++入门极限》新手入门:C++中堆内存(heap)的概念和操作方法
新手入门:C++中堆内存(heap)的概念和操作方法   堆内存是什么呢?   我们知道在c/c++中定义的数组大小必需要事先定义好,他们通常是分配在静态内存空间或者是在栈内存空间内的,但是在实际工作中,我们有时候却需要动态的为数组分配大小,在这里c库中的malloc.h头文件中的malloc()函数就为您解决了问题(bc或者是在老的标准中是alloc.h),它的函数原形是void* malloc(size_t size),在动态开辟的内存中,在使用完后我们要使用free()函数
landv
2019-07-15
4730
《挑战30天C++入门极限》C/C++中字符串常量的不相等性及字符串的Copy
C/C++中字符串常量的不相等性及字符串的Copy #include <iostream> void main(void) { if("test"=="test") { cout<<"相等"; } else { cout<<"不相等"; } }   上面的代码我们测试两个内容为test的字符串常量是否相等,按照常理,应该是相等的,这些在一些过程
landv
2019-07-15
5620
《挑战30天C++入门极限》C++中类的多态与虚函数的使用
C++中类的多态与虚函数的使用   类的多态特性是支持面向对象的语言最主要的特性,有过非面向对象语言开发经历的人,通常对这一章节的内容会觉得不习惯,因为很多人错误的认为,支持类的封装的语言就是支持面向对象的,其实不然,Visual BASIC 6.0 是典型的非面向对象的开发语言,但是它的确是支持类,支持类并不能说明就是支持面向对象,能够解决多态问题的语言,才是真正支持面向对象的开发的语言,所以务必提醒有过其它非面向对象语言基础的读者注意!   多态的这个概念稍微有点模糊,如果想在一
landv
2019-07-15
7010
《挑战30天C++入门极限》C++运算符重载转换运算符
  当一个类含有转换运算符重载函数的时候,有时候会破坏C++原有规则,导致运算效率降低,这一点不得不注意。   示例如下: //例3 //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include <iostream> using namespace std; class Test { public: Test(int a = 0) { cout<<this<<":"<<"载入构造函数!"<<a<<endl; Test::a = a; } Test(Test &temp) { cout<<"载入拷贝构造函数!"<<endl; Test::a = temp.a; } ~Test() { cout<<this<<":"<<"载入析构函数!"<<this->a<<endl; cin.get(); } operator int()//转换运算符,去掉则不会调用 { cout<<this<<":"<<"载入转换运算符函数的内存地址:"<<this->a<<endl; return Test::a; } public: int a; }; int main() { Test b=Test(99);//注意这里 cout<<"b的内存地址"<<&b<<endl; cout<<b.a<<endl; system("pause"); }   按照C++对无名对象的约定,Test b=Test(99);C++是会按照Test b(99);来处理的,可是由于转换运算符的加入,导致这一规律被破坏,系统会“错误的”认为你是要给对象赋值,所以系统首先利用Test(99)创建一个临时对象用于赋值过程使用,可是恰恰系统又没有使用自动提供的赋值运算重载函数去处理,因为发现b对象并未构造,转而又不得不将开始原本用于赋值而创建的临时对象再次的强转换为int类型,提供给b对象进行构造,可见中间的创建临时对象和载入转换运算符函数的过程完全是多余,读者对此例要认真解读,充分理解。   运行结果如下图所示(运行过程的解释见图):
landv
2019-07-15
4520
《挑战30天C++入门极限》C++中利用构造函数与无名对象简化运算符重载函数
C++中利用构造函数与无名对象简化运算符重载函数   在完整描述思想之前,我们先看一下如下的例子,这个例子中的加运算符重载是以非成员函数的方式出现的: //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include <iostream> using namespace std; class Test { public: Test(in
landv
2019-07-15
4570
《挑战30天C++入门极限》对C++递增(增量)运算符重载的思考
对C++递增(增量)运算符重载的思考   在前面的章节中我们已经接触过递增运算符的重载,那时候我们并没有区分前递增与后递增的差别,在通常情况下我们是分别不出++a与a++的差别的,但的确他们直接是存在明显差别的。   先看如下代码: #include <iostream> using namespace std; int main() { int a=0; ++(++a);//正确,(++a)返回的是左值
landv
2019-07-15
5130
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档