![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 66
cany1000
码农。无所谓,像蜗牛一点一点爬。
展开
-
C++ -- 面向对象程序设计
一、面向对象程序设计方法的基本特点:抽象、封装、继承和多态。1)抽象抽象是指对具体问题(对象)进行概括,抽出一类对象的共性并加以描述的过程。抽象有两个方面:数据抽象和方法(行为)抽象数据抽象:描述某类对象的属性或状态。行为抽象:描述某类对象的共同行为或共同功能。想象一个表(Clock):我们可以看到的是时间(包括小时、分钟、秒),是属于表本身的,我们可以看,但是不能改变原创 2016-04-02 17:32:56 · 585 阅读 · 1 评论 -
C++ -- 类的继承和派生
1. 派生类的声明class 派生类名: 继承方式1 基类名1, 继承方式2 基类名2, ...., 继承方式n 基类名n{ 派生类成员的声明;};例如:class Mother{};class Father{};class Child:public Mother,public Father{public: Child(); ~Child();}基类Moth原创 2016-04-09 17:20:43 · 731 阅读 · 1 评论 -
C++ -- 变量和类的定义
一、 变量的声明和定义在C++语言中,变量仅能定义一次,而且在使用变量之前必须定义或声明变量。1)变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。2)声明用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过使用extern关键字声明变量名而不定义它。extern int i; // 声明但原创 2016-01-06 10:36:12 · 1143 阅读 · 1 评论 -
C++ -- 构造函数
1)构造函数与类同名。除了名字外,构造函数的另一个特别之处是没有返回值类型,这与返回值类型为void的函数不同。如果它有返回值类型,那么编译器将不知所措。2)静态构造函数实现对一个类进行初始化的方法成员。它一般用于对静态数据的初始化。静态构造函数不能有参数,不能有修饰符而且不能被调用,当类被加载时,类的静态构造函数自动被调用。注意静态构造函数只能对静态数据成员进行初始化,而原创 2016-03-14 19:48:56 · 376 阅读 · 1 评论 -
C++ -- 常对象和常成员函数
1. 常对象:对象的数据成员在生存周期内不会改变的对象。定义常对象时必须对它的数据成员进行初始化,并且不能改变其数据成员的值。常对象的声明方式: const 类名 对象名 或者: 类名 const 对象名如果程序中出现对常对象的数据成员修改的语句,编译器会报错。2. 常成员函数在类中,用const声明的成员函数就是常成员原创 2016-04-16 22:34:02 · 934 阅读 · 1 评论 -
C++ -- 类成员函数的重载、重写和隐藏
类成员函数的重载、覆盖和隐藏的区别1. 成员函数的重载是指函数名相同,但是参数的个数或参数的类型不同,编译后重载的函数都具有不同的地址,重载可以针对运算符,而覆盖不行. 成员函数被重载的特征: a. 相同的范围,作用域(同一个类中) b. 函数名相同,参数不同 c. virtual关键字可有可无原创 2016-03-19 19:55:53 · 760 阅读 · 1 评论 -
C++ -- 虚函数和纯虚函数
一、定义:都有virtual关键字一个函数为虚函数,该函数可以实现,允许用基类的指针调用子类的同名函数。一个函数为纯虚函数,该函数不能实现,子类继承这个类必须实现这个函数才能实例化对象。class A{public: virtual void func();//虚函数}class B{public: virtual void func()=0;//纯虚函数};原创 2016-01-17 11:25:08 · 334 阅读 · 1 评论 -
C++ -- 虚函数表
1)指向虚函数表的指针#include "stdafx.h"#include "iostream"using namespace std;class A{public: virtual void func1();//指向虚函数表的指针,占4个字节。 virtual void func2(); virtual void func3();private: int m; cha原创 2016-01-17 18:17:15 · 315 阅读 · 1 评论 -
C++ -- 友元(friend)
友元函数和友元类在C++中,以关键字friend声明友元关系,友元可以访问与其有friend关系的类中的私有成员。1. 友元函数:将一个函数声明为当前类的友元函数,则该函数可以访问当前类的保护成员和私有成员。#include "stdafx.h"#include #include using namespace std;class Student{public: Stu原创 2016-02-02 16:15:47 · 397 阅读 · 1 评论 -
C++ -- 指针函数和函数指针
1. 指针函数也叫指针型函数函数的类型:函数的返回值的类型。每个函数都有自己的类型,除void类型的函数外都有自己的返回值。返回值为指针类型的函数就是指针型函数,即指针函数。注:不能返回局部变量的地址,因为函数调用结束后,函数的局部变量就释放了,返回地址中存放的内容也是无效的了。声明指针函数的语法形式是:数据类型 *函数名(参数列表){ 函数体}2. 函原创 2016-04-19 16:04:00 · 396 阅读 · 1 评论 -
C++ -- 函数的缺省函数
缺省参数:就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果没有指定该参数的值,则采用该默认值。如下声明:原创 2016-07-20 14:24:55 · 4495 阅读 · 1 评论 -
C++ -- static和inline函数
1、在C语言中,关键字Static有三个明显的作用:--- 在函数体内,一个被声明为静态的变量在这一函数被调用结束后不释放其存储空间。定义为static的局部变量存储在全局区(静态区),而一般的局部变量存储在栈中。--- 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其他函数访问。它是一个本地的全局变量。在模块内,一个被声明为静态的函数只可被这一模原创 2016-12-28 17:27:47 · 4953 阅读 · 1 评论 -
C++ -- 多态的实现
1. 消息 消息在C++编程中指的是对类的成员函数的调用。 多态是指相同的消息被不同类型的对象接收会引起不同的操作。 通俗的说是在不同情况下调用同名函数时,实际上调用的并不是同一个函数。2. 多态的类型 分为:重载多态,强制多态,参数多态和包含多态。 前两种称为专用多态。 1)普通函数的重载和类的成员函数的重载,都属于重载多态。原创 2016-04-11 20:34:20 · 588 阅读 · 1 评论 -
C++ -- 顺序容器和适配器
---- C++标准库定义了三种顺序容器(Sequential Container)类型:vector,list,deque顺序容器内的元素按其位置存储和访问。---- vector:支持快速随机访问。(类似于静态数组)---- list:支持快速插入和删除---- deque:双端队列,double-ended queue的简写,发音为“deck”。它们的差别在于访问元素的方原创 2016-10-20 15:22:40 · 2464 阅读 · 1 评论 -
C++ -- 顺序容器的访问
1、顺序容器的大小操作c.size()返回容器c中的元素个数。返回类型为c::size_typec.max_size()返回容器c可容纳的最多元素个数,返回类型为c::size_typec.empty()返回标记容器大小是否为0的布尔值。容器的大小为0,返回true,否则false。c.resize(n)调整容器c的长度大原创 2016-10-20 15:59:06 · 331 阅读 · 1 评论 -
C++ -- vector的元素访问
1、向量容器(vector)是一种顺序容器,是一块连续分配的内存,支持随机访问,从数据安排的角度看,和数组极其相似。数组跟vector的区别在于:数组是静态分配空间,一旦分配了空间的大小,就不可以再改变了。例如,int a[6];而vector是动态分配内存,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量,vector容器的容量增长是按照容器现在容量的一倍进行增长。原创 2016-09-13 15:02:53 · 1137 阅读 · 1 评论 -
C++ -- vector的元素删除
1、pop_back()void pop_back();Delete last elementRemoves the last element in the vector, effectively reducing the container size by one.This destroys the removed element.#include #i原创 2016-10-17 15:25:11 · 183184 阅读 · 8 评论 -
C++ -- vector空间管理
1、vector中的reverse()函数用来定义预留空间,改变capacity,不改变size。会去分配内存,但不会构造出对象。如果改变后的capacity比当前的capacity大,则capacity会变为改变后的capacity,反之capacity不变。#include #include #include using namespace std;int main(){原创 2016-08-08 16:58:23 · 4288 阅读 · 2 评论 -
C++ -- explict和implicit
explicit:只能用于修饰只有一个参数的类构造函数。作用是:表明该构造函数是显式的,而非隐式的。implicit:与explicit相对应的关键字,隐式的。类的构造函数在默认情况下是implicit的。在C++中,如果类的构造函数只有一个参数时,那么在编译的时候会有一个缺省的转换操作,即编译器自动将整型转换为类类型的对象。class CXString{public: char * _ps...原创 2018-05-25 17:36:42 · 936 阅读 · 1 评论 -
sizeof()和strlen()用法
1、sizeof( )是运算符,不是函数。 在编译时计算,因此不能用来返回动态分配(malloc)的内存空间的大小。2、strlen( )是函数,要在运行时才能计算。 函数的参数必须是字符型指针(char *),必须是以'\0'结尾的。 strlen所作的仅仅是一个计数器的工作,它从内存的某个位置开始计算,直到碰到第一个字符串结束符'\0'为止,然后返原创 2016-01-17 09:34:14 · 1117 阅读 · 0 评论 -
string的增删改查
赋值操作:=,assign()追加,插入:append(), push_back(), insert()大小:size(), length(), capacity()位置访问:[ ], at()擦除:erase()替换:replace()#include "stdafx.h"#include "iostream"#include using namespace std原创 2016-01-07 09:41:24 · 592 阅读 · 0 评论 -
string的常用操作
1. string的初始化定义对象时指定了初始值的对象被称为是已初始化的。C++支持两种初始化变量的形式:复制初始化和直接初始化。复制初始化用等号(=)来表示,直接初始化是把初始化式放在括号中。代码一:#include "stdafx.h"#include "iostream"#include using namespace std;int main(){ stri原创 2016-01-06 16:40:10 · 491 阅读 · 0 评论 -
sizeof结构体和内存对齐
先看一个sizeof(结构体)的例子1:#include #include using namespace std;typedef struct number{ int i_data; char c_data; double d_data; float f_data;}NUM;int main(){ NUM num = {4,'b',10.2,5}; NUM *m原创 2016-03-01 13:38:42 · 633 阅读 · 1 评论 -
C++int转string
1、to_string()需包含头文件#include std::string to_string(int value );(1)(C++11起)std::string to_string(long value );(2)(C++11起)std::string to_string(long l原创 2016-10-10 14:50:18 · 451 阅读 · 0 评论 -
虚继承
1、多继承(环状继承),A->D,B->D,C->(A,B),例如:class D{......};class B: public D{......};class A: public D{......};class C: public B, public A{.....};这个继承会使D创建两个对象(C++编译器现在已优化?),要解决上面的问题,就要采用虚拟继承格式:cla...原创 2018-06-10 10:42:54 · 421 阅读 · 0 评论 -
栈地址的分配和大小端模式
1. 栈地址的生长方式栈的空间是由编译器进行开辟和释放,主要存放局部变量和函数参数。来看一个简单的例子:#include #include using namespace std;//函数参数列表的存放方式是,先对最右边的形参分配地址,后对左边的形参分配地址void fun(int a,int b){ printf("&b = 0x%x\n",&b); printf("原创 2016-03-02 11:40:54 · 5633 阅读 · 3 评论 -
顺序容器之list
1、list---- list表示双向链表。除了第一个和最后一个元素外,每个元素都与前后的元素相连接,这意味着可以双向遍历list。---- list和vector之间的区别和联系:--1)list中任一位置进行插入和删除的时间都是固定的;vector在结尾处有固定的插入和删除时间,结尾处之外插入和删除的时间是线性的。--2)vector强调的是进行快速随机访问,而list强调转载 2016-10-21 11:31:09 · 310 阅读 · 0 评论 -
setw()使用方法
1、setw(int n)只是对直接跟在(Sets the number of characters to be used as thefield width for the next insertion operation.)2、n是在输出时分配了n个字符的输出宽度,然后默认的是在n个字符宽度中右对齐输出,可以使用setiosflags(ios::left)设置为左对齐输出,可以使用转载 2016-10-18 10:59:14 · 34679 阅读 · 0 评论 -
逆向扫描指令
逆向扫描指令BSR(Bit Scan Reverse),从左向右扫描,即从高位向低位扫描。Search the mask data from most significant bit (MSB) to least significant bit (LSB) for a set bit (1).即第一个出现1的位置。原型:unsigned char _BitScanReverse(unsigned ...原创 2018-06-21 15:31:25 · 3424 阅读 · 0 评论 -
指针和const
1、声明一个指针---- 在声明一个指针时,通过在声明语句的不同位置使用const可达到3个目的--1)禁止对指针进行改写(赋值)--2)禁止通过间接引用(*指针)对指针所指的变量进行赋值。--3)既禁止对指针赋值,又禁止通过间接引用对指针所指的变量进行赋值。---- 禁止改写指针(常量指针/常指针)声明一个指针时,在*的右边加上const修饰符,表示该指针的指向不能改变,原创 2016-11-03 15:27:38 · 284 阅读 · 0 评论 -
static, const关键字和String类
class String{public: String(const char *str=NULL); String(const String &other); ~String(void); String &operate(const String &other);private: char *m_data;};String::String(const char *str){原创 2016-02-24 15:21:08 · 633 阅读 · 0 评论 -
calloc指向发生改变
1、例一#include using namespace std;int main(){ int a = 10; int *q = &a; int *s =q; cout<<"====================="<<endl; cout<<"q is 0x"<<hex<<q<<endl;//q和a都指向a cout<<"*q is "<<dec<<*q<<endl;原创 2016-08-08 21:11:18 · 341 阅读 · 0 评论 -
C++错题
1、两个线程并发执行以下代码,假设a是全局变量,那么以下输出哪个是可能的? int a = 1; void foo() { ++a; printf("%d",a); }A 3 2 B 2 3 C 3 3 D 2 2答案:ABCD解析:假设线程x和y同时执行,x和y可随时被抢占,a的初始值为1A、y先执行++a,a为2;y执行printf,原创 2016-08-10 15:40:07 · 638 阅读 · 0 评论 -
C++习题
1. 模板例子1template void f(T){ static int i = 0; cout<<++i;}int main(){ f(1); f(1.0); f(1); system("pause"); return 0;}输出:112因为1.0和1是不同的类型例子2template void f(T &i){ cout<<1;}原创 2016-03-17 14:01:58 · 424 阅读 · 0 评论 -
联合容器
1、联合容器(associative container)---- 对容器概念的另一种改进,联合容器将值与关键字关联在一起,使用关键字来查找值。key:工号; value:姓名,地址等。对于容器X,表达式X::value_type通常指出了存储在容器中的值的类型。对于联合容器来说,表达式X::key_value指出了用作关键字的类型。---- 联合容器的长处在于:它提供了对元素的快原创 2016-10-21 14:48:01 · 326 阅读 · 0 评论 -
【error】LINK1123: failure during conversion to COFF: file invalid or corrupt
在一台新的win7 64位电脑上装了VS2010,每运行一个简单的程序总是报 error LINK1123: failure during conversion to COFF: file invalid or corrupt 的错误。通过这篇文章发现问题及解决方法:这个错误是因为采用incremental linking(增量式链接)导致的,可以通过禁止工程中in转载 2016-12-19 17:50:56 · 301 阅读 · 0 评论 -
SystemC - 数据类型
SystemC练习#include "stdafx.h"#define SC_INCLUDE_FX //fixed point#include #include using namespace std;SC_MODULE(Hello_SystemC){ SC_CTOR(Hello_SystemC)//create a constructor { SC_THREAD(ma原创 2016-06-26 17:33:53 · 779 阅读 · 0 评论 -
sc_set_time_resolution() and sc_get_time_resolution()
1、time resolution is a global variable that is used by the simulation kernel and all objects of sc_time, changes to time resolution are restricted.sc_set_time_resolution() :原创 2017-01-18 11:09:53 · 1660 阅读 · 0 评论 -
process and event
1、ProcessesSC_METHOD(a_method);Executeits body from the beginning to the end。Invokedmultiple times,Cannot be suspended。SC_THREAD(b_method);Invokedonly once,2、turn_of_even原创 2017-02-24 21:02:17 · 538 阅读 · 0 评论 -
A notion of time
1、simulation kernel用sc_time数据类型来跟踪仿真时间,指定delay和timeouts。sc_time是用一个64bit的无符号整型数来表示。SC_NS 纳秒 SC_US 微秒 SC_MS 毫秒 SC_SEC 秒sc_time_stamp() 用来获取当前的仿真时间,返回值是一个sc_time对象。sc_start() 启动仿真,原创 2016-12-29 17:05:32 · 1017 阅读 · 0 评论