c++学习
w3071206219
这个作者很懒,什么都没留下…
展开
-
输入3个字符串,要求字母按从小到大顺序输出
#include#includeusing namespace std;int main(){string string1,string2,string3,temp;cout<<"please input three strings:";cin>>string1>>string2>>string3;if(string2>string3){ temp=string2; strin原创 2016-09-26 10:27:40 · 6206 阅读 · 0 评论 -
内联函数,求三个数的最大值
#includeusing namespace std;inline int max(int,int,int);int main(){ int i=10,j=20,k=30,m; m=max(i,j,k); cout<<"max="<<m<<endl; return 0;}inline int max(int a,int b,int c){ if(b>a)a=b; if(原创 2016-09-26 10:37:22 · 3639 阅读 · 0 评论 -
函数的重载
函数的重载即对一个函数名重新赋予它新的含义,使一个函数名可以多用,即一物多用。求3个数中的最大数#includeusing namespace std;int max(int a,int b,int c);long max(long a,long b,long c);double max(double a,double b,double c);int main(){ int原创 2016-09-26 10:45:57 · 300 阅读 · 0 评论 -
函数模板
函数模板的一般形式template适用于函数体相同、函数参数个数相同而类型不同。#includeusing namespace std;template T max(T a,T b,T c){ if(b>a)a=b; if(c>a)a=c; return a;}int main(){ int i1,i2,i3,i; cin>>i1>>i2>>i3; i=ma原创 2016-09-26 10:49:07 · 179 阅读 · 0 评论 -
有默认参数的函数
实参和形参结合是从左到右顺序结合的,第1个实参与第1个形参结合,第2个实参与第2个形参结合。因此默认参数的值必须放在形参列表中的最右端,否则出错。#includeusing namespace std;int max(int a,int b,int c=0);//c默认形参 int main(){ int a,b,c; cin>>a>>b>>c; cout<<"max(a,b,c原创 2016-09-26 10:54:17 · 321 阅读 · 0 评论 -
查找学生
一个班n个学生,需要把每个学生的简单材料输入计算机保存。然后可以通过某一学生的姓名查找有关材料。如果有,输出姓名和学号,如果无,输出本班无此人。#include#includeusing namespace std;int input_data();int search(string find_name);string name[50],num[50]; int n;int原创 2016-09-26 11:19:22 · 434 阅读 · 0 评论 -
指向指针的指针
#includeusing namespace std;int main(){ char **p; char *name[]={"BASIC","FORTRAN","C++","Pascal","COBOL"}; p=name+2; cout<<*p<<endl; cout<<**p<<endl;}原创 2016-09-26 11:31:34 · 201 阅读 · 0 评论 -
引用作为函数参数
将变量名作为实参和形参。这时传递给形参的是变量的值,传递是单向的。如果执行函数期间形参的值发生变化,并不会传给实参。在调用函数时,形参和实参不是同一个存储单元。#includeusing namespace std;int swap(int a,int b);int main(){ int i=3,j=5; swap(i,j); cout<<i<<" "<<j<<endl;原创 2016-09-26 14:18:35 · 299 阅读 · 0 评论 -
传递变量的地址
形参是指针变量,实参是一个变量的地址,调用函数,形参得到实参变量的地址。#includeusing namespace std;int swap(int *a,int *b);int main(){ int i=3,j=5; swap(&i,&j); cout<<i<<" "<<j<<endl; return 0; }int swap(int *a,int *b){ i原创 2016-09-26 14:22:52 · 395 阅读 · 0 评论 -
引用传地址
#includeusing namespace std;int swap(int &a,int &b);int main(){ int i=3,j=5; swap(i,j); cout<<i<<" "<<j<<endl; return 0; }int swap(int &a,int &b){ int temp; temp=a; a=b; b=temp;}原创 2016-09-26 14:27:43 · 778 阅读 · 0 评论 -
字符串函数
字符串比大小。#includeint mylen(const char *s1,const char *s2);int main(){ char s1[]="abc"; char s2[]="Abc"; printf("%d\n",mylen(s1,s2)); } int mylen(const char *s1,const char *s2){ while((*s1==原创 2016-09-26 15:50:16 · 255 阅读 · 0 评论 -
用对象找出10个整形数组中的最大元素。
#includeusing namespace std;class Array_max{ public: void set_value(); void max_value(); void show_value(); private: int array[10]; int max; };void Array_max::set_value(){ int i; for原创 2016-09-27 15:42:40 · 580 阅读 · 0 评论 -
构造函数使用默认参数后不能使用构造函数重载
#includeclass Date{ public: Date(int,int,int); Date(int,int); Date(int); Date(); void display(); private: int month; int day; int year;};Date::Date(int m,int d,int y):month(原创 2016-09-30 11:16:50 · 2315 阅读 · 0 评论 -
建立一个对象数组,内放5个学生数据(学号、成绩),用指针指向数组首元素,输出学生的数据
#includeclass Student{ public: Student(int n,int m) { num=n; score=m; } void display(); private: int num; int score;};void Student:: display(){ std::cout<<num<<" "<<score<<std::endl原创 2016-09-30 11:32:18 · 22346 阅读 · 0 评论 -
建立一个对象数组,内放5个学生数据(学号、成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并从输出学号。
#includeclass Student{ public: Student(int n,int m) { num=n; score=m; } void display(); int score; int num; };void Student:: display(){ std::cout<<num<<" "<<score<<std::endl; }int原创 2016-09-30 13:56:33 · 19397 阅读 · 0 评论 -
查看DEVC++程序运行的代码区、数据区、栈区、堆区的地址
#includeusing namespace std;int data=23;int main(){ int i=15; int *ptr=new int(8); cout<<"code address:"<<&main<<endl; cout<<"global datum address:"<<&data<<endl; cout<<"local datum address:"原创 2016-10-01 10:47:56 · 5228 阅读 · 0 评论 -
读取堆区的地址
#includeusing namespace std;int main(){ int *p=new int(10); cout<<"address of pointer itself:"<<&p<<endl; cout<<"address of integer :"<<p<<endl; cout<<"integer value:"<<*p<<endl; delete p;原创 2016-10-01 11:02:48 · 316 阅读 · 0 评论 -
读取堆区,栈区地址及结论
#includeusing namespace std;int fun();int g;static int sg=10;int main(){int a(3);cout<<"addr.of auto a in main:"<<&a<<endl;static int sb;cout<<"addr.of external static sg(global):"<<&sg<<end原创 2016-10-01 11:26:38 · 432 阅读 · 0 评论 -
对象的双区存储
#includeusing namespace std;class base{ public: int x1; static double s; int inc() { return x1; }};double base::s=1.1;int main(){ cout<<"size of class base is"<<sizeof(base)<<end原创 2016-10-01 12:51:40 · 211 阅读 · 0 评论 -
对象复制非静态数据
#include#includeusing namespace std;class point{ int a,b; char *ptr; int size; int arr[3]; public: point(int j,int k,char *s,int m){ a=j; b=k; size=strlen(s)+1; ptr=new char[siz原创 2016-10-01 18:35:12 · 246 阅读 · 0 评论 -
复合对象复制非静态数据
#include#includeusing namespace std;class figure{ int a; double d; public: figure(int j,double m) { a=j; d=m; cout<<"CONS-sub"<<endl; } void sub_show() { cout<<"sub_object:"<原创 2016-10-01 18:59:52 · 247 阅读 · 0 评论 -
子对象构造函数和析构函数的调用顺序
#includeusing namespace std;class sub_class{ int x; public: sub_class(int z)//构造函数 { x=z; cout<<"Constructor_sub"<<x<<"called!"<<endl; } ~sub_class(){ cout<<"Destructor_sub"<<x<<"call原创 2016-10-02 10:22:31 · 947 阅读 · 0 评论 -
建立全局和局部对象时,不同的构造函数和析构函数的调用顺序
#includeusing namespace std;void create();class base{ int data; public: base(int i) { data=i; cout<<"CONS:"<<i<<endl; } ~base() { cout<<"DES:"<<data<<endl; } void show()原创 2016-10-02 10:36:19 · 710 阅读 · 0 评论 -
建立不同类型对象时,构造函数和析构函数的调用顺序
头文件#ifndef CONS_DES_H#define CONS_DES_H#includeclass base{ public: base(int); ~base(); private: int data;};#endif隐藏源文件:#include "cons_des.h"#includebase::base(int value):data(原创 2016-10-02 11:21:58 · 1645 阅读 · 1 评论 -
this指针
建立一个对象时,系统为该对象分配内存栈区空间(位于栈区内),用于存储该对象的非静态数据成员。而该类的成员函数则存于另外的代码分区内。这些成员函数一般都用于访问(读写)该类各对象的各个数据成员。试问:各成员函数怎么知道这些非静态数据成员的地址,也即各对象的地址?原来,每个对象的地址都存放在它自己的this指针内。而每个成员函数的参数表中都隐含着这个指针。应该指出,this指针是指向一个对象的,所原创 2016-10-02 11:38:17 · 466 阅读 · 0 评论 -
this 指针的地址--调用成员函数的所在对象的起始地址
#includeusing namespace std;class Test{ int x; public: Test(int a){ x=a; } void get_this();};void Test:: get_this(){ cout<<"this points to"<<this<<endl;}int main(){ Test obj(12); c原创 2016-10-02 11:54:34 · 1497 阅读 · 0 评论 -
this指针是允许依靠返回该类对象的引用值来连续调用该类的成员函数
#includeusing namespace std;class date{ int year; int month; public: date() { year=0; month=0; } date& setyear(int yr) { year=(yr<=2008)?yr:0; return *this; } date& setmonth(int m原创 2016-10-02 18:12:53 · 1002 阅读 · 0 评论 -
定义Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。将类的定义部分分别作为3个头文件
定义Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。将类的定义部分分别作为3个头文件,对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数中用#include命令把它们包含进来,形成一个完整的程序,并上机运行。头文件1:#ifndef POINT_H#define POINT_H#include u原创 2016-10-06 11:52:41 · 34713 阅读 · 4 评论 -
在例12.3的基础上作以下修改,并作必要的讨论。
在例12.3的基础上作以下修改,并作必要的讨论。(1) 把构造函数修改为带参数的函数,在建立对象时初始化。(2) 先不将析构函数声明为virtual,在main函数中另设一个指向Circle类对象的指针变量,使它指向grad1。运行程序,分析结果。(3) 不作第(2)点的修改而将析构函数声明为virtual,运行程序,分析结果。(1) 把构造函数修改为带参数的函数,在建立对象时初始原创 2016-10-06 14:49:31 · 5982 阅读 · 0 评论 -
写一个程序,定义抽象基类Shape,由它派生出3个派生类: Circle(圆形)、Rectangle(矩形)、Triangle(三角形)
写一个程序,定义抽象基类Shape,由它派生出3个派生类: Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。#includeusing namespace std;class Shape{ public: virtual float printArea() const {原创 2016-10-06 16:06:19 · 82774 阅读 · 2 评论 -
析构函数
完成对象被删除前的一些清理工作。在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数,其函数体为空。构造函数和析构函数举例#include using namespace std;class Point { public: Point(int xx,int yy); ~Point(); //.原创 2016-10-07 08:45:57 · 429 阅读 · 0 评论 -
CString发生内存泄露
MFC对话框程序在退出时,发生了内存泄露:Detected memory leaks!Dumping objects ->{98500} normal block at 0x05785AD0, 152 bytes long.Data: << N N x 7 > 3C AC 4E 10 00 00 00 00 BC A4 4E 10 78 B6 37 ...原创 2019-05-02 17:10:20 · 1579 阅读 · 0 评论 -
当CAsyncSocket遇到多线程
现象用多线程方法设计socket程序时,你会发现在跨线程使用CAsyncSocket及其派生类时,会出现程序崩溃。所谓跨线程,是指该对象在一个线程中调用Create/AttachHandle/Attach函数,然后在另外一个线程中调用其他成员函数。下面的例子就是一个典型的导致崩溃的过程:CAsyncSocket Socket;UINT Thread(LPVOID){ S...原创 2019-04-30 19:38:48 · 698 阅读 · 0 评论