当前位置:编程学习 > C/C++ >>

C++阶段小结

一, 输入输出函数
标准输出函数cout,其语句的一般格式为
Cout<<表达式;
Cout<<表达式<<endl;(endl为换行符相当于‘\n’)
Cout<<表达式1<<表达式2<<……<<表达式n;
同理标准输入函数cin其语法格式为
Cin>>表达式1>>表达式2>>表达式n>>endl;
C++的标准输入输出于C语言来说比较方便,不需要输入输出格式说明
只要用到标准输入输出函数就必须调用库函数输入输出流库<iostream>和域名空间using namespace std.
二、字符串变量
C++中多了一种字符串类型的变量(string),定义格式为string s;可以直接进行字符串变量的加比较。例如,string s1=“你好”;string s2=“世界”;s1+s2=“你好世界”,表达式s1>s2如果正确返回1,否则返回0.使用string变量同样需要调用流库<iostream>和域名空间using namespace std.
三、引用
Int &b=a;这里就是一个引用,相当于给变量a引用一个新的名字b,b不会再内存开辟空间,这个时候a和b完全等价,指同一块内存变量,操作a就相当于操作b。引用主要用于传递函数的参数和返回值,例如:
Void change1(int &r)
{
r=100;
}
Void change2(int *p)
{
*p=1000;
}
void main()
{
Int a=1;
change1(a);
cout<<a<<endl;
change2(&a);
cout<<a<<endl;
}
结果输出100,1000.可见引用传递和指针传递都可以改变参数的值。
引用的使用需要注意以下几点:
1. 引用必须在声明时立即初始化,不允许空引用;
2. 引用一旦初始化,就不能再更改,不能再引用其他数据;
3. 引用和被引用的变量实际上代表同一个内存的数据。
四、类
类是具有相同属性和行为的一组对象的集合,主要包括属性和行为两个部分。类类型是C++中最主要的数据结构类型。
声明一个类类型
class student{
public;//访问权限修饰符
int num;//声明成员变量
char 易做图;
char name[20];//声明成员函数
void display();
Void  student::display()
{
}//成员函数声明后必须要定义,可以在成员函数声明时就定义,也可以在类类型声明外面定义,在外面定义格式为 函数返回值+类类型+双冒号+函数名+函数参数
定义一个对象:  类型名  对象名(构造函数参数)//构造函数的参数默认为空
对象只保存成员变量,存储在栈中,函数在代码区。访问对象的成员变量的方法:
对象.成员
对象.成员函数(实参列表)
对象的指针->成员变量
对象的指针->成员函数名(实参列表)
对象的引用.成员变量
对象的引用.成员函数(实参列表)
类名::静态成员变量名
类名::静态成员函数名(实参列表)
五.成员函数重载
成员函数的名字一样但是成员函数参数不同包括参数的类型、个数、顺序不一样的现象叫做成员函数重载。成员函数的重载与函数的返回值无关。判断两个成员函数是否重载的最总取决于将同样的参数放在函数名一样的成员函数中看是否出现歧义,若没有歧义则是同一函数,若有歧义则是成员函数重载。
六、构造函数
构造函数是一种特殊的成员函数:
1, 构造函数的名字必须要与类名相同
2, 它不具有任何类型,不返回任何值
3, 构造函数的功能是由用户定义的
4, 构造函数可以重载
5, 构造函数在生成对象时就执行
构造函数的声明格式为:
类名();
类名(形参列表)
关于构造函数一些总结
1. 如果一个类中没有自定义构造函数,那系统会默认生成一个public修饰的无参数空实现的构造函数
2. 当自定义了构造函数,则默认的无参数的构造函数就不存在了
3. 创建对象的时候会调用类中其中的一个构造函数
4. 构造函数可以重载,创建对象时具体调用哪一个构造函数由传参数来确定
5. 构造函数的作用主要用于初始化正在创建的对象
七、成员变量的初始化
采用构造函数初始化成员变量
例如
Stu:Stu(int age,string name){
this->age=age;
this->name=name;//构造函数中的this指正在穿件的对象的地址
}
采用初始化表为对象的成员变量赋值
例如
Stu::Stu(int xage,string xname):age(xage),name(xname){
}
八、析构函数
析构函数名字是类名的前面加一个“~”符号。没有参数,并且不能够重载。
当对象的生命期结束时,会自动执行析构函数。
析构函数一般用于完成“清理”的工作,如果用户没有自定义析构函数,C++编译系统会自动生成一个析构函数,但它什么操作都不进行。想让析构函数完成任何工作时,都必须要自定义析构函数。
构造函数和析构函数按照栈中先进后出的顺序
九、对象数组
数组不仅可以由简单的变量组成,也可以由对象组成(对象数组的每一个元素都是同类的对象)
1. 调用可以不传参数的构造函数创建对象数组
Student stud[50];
2. 调用可以只传一个参数的构造函数有两种方法创建对象数组
Student stu[3]={60,70,80};
或者
Student stu[3]={Student(60),Student(70),Student(80)};
3. 调用可以传多个(这里举例3个)参数的构造函数创建对象数组
Student stu[3]={Student(1001,1,10),Student(1002,2,11),Student(1003,3,12)};
 不能够直接Student stu[3]={(1001,1,10),(1002,2,11),(1003,3,12)};这样的话只是把每个括号里最后一个参数传给了构造函数参数列表中的第一个参数,其他的参数并没有传到
十、指针
指向对象成员变量的指针
定义  数据类型名 *指针变量名;
成员变量值的形式:&成员变量指针
指向成员函数的指针
定义指向成员函数的指针变量的形式
1. 无参数成员函数
成员函数返回类型  (类名::指针变量名)();
2. 有参数成员函数
成员函数返回类型 (类名::指针变量名)(参数列表);
成员函数指针变量值的形式:
&类名::成员函数名;
成员函数指针变量使用形式:
(对象.*指针变量名)(实参);
指向对象的常指针和指向常对象的指针
类名 *const 指针变量名;(常指针)
禁止改变指针,指针是不变的
const 类名 *指针变量名;(常对象指针) 
禁止改变所指向的对象,对象时不变的
例如:
void f1() {
A a1;A a2;
A * const p = &a1;
//p = &a2;//错,常指针不可改变
p->x = 23;
}
void f2() {
A a1;A a2;
const A *p;
p = &a1;//指针可以改变
//p->x = 23;错,常对象指针指向的对象中的内容不可以改变
p = &a2;
}
void f3() {
A a1;A a2;
const A * const p = &a1;//常对象常指针,指针和对象均不可改变
//p = &a2; 错
//p->x = 34; 错
}
十一、常成员变量和常成员函数以及常对象
常成员变量时用关键字const来修饰声明的成员变量,const位于变量前或者类型前都一样。例如
class Time{
public:
const int hour;
int const minute;
}
1. 常成员变量只能通过构造函数的初始化表对常成员变量进行初始化;
例如. 
class A {
public:
//常成员变量
const int x;
const int y;
int z;
A(int x, int y);
A(int x, int y, int z);
};
A::A(int x, int y): x(x),y(y) {
}
A::A(int x, int y, int z): x(x),y(y) {
this->z = z;
}
2. 常成员变量所在类中所有的构造函数都必须通过初始化表对常成员进行初始化;
3. 常成员变量可以向普通的成员变量一样进行访问,但是其值是不能被修改的。
4. 必须在构造函数初始化,不然为随机数没有意义
常成员函数:用const修饰的成员函数,const位于函数括号之后,定义和声明的地方都要加上const。
例如
class Time{
public:
void show()const;
}
常成员函数可以用this访问成员变量,但是不能修改this访问的成员变量。(包括常成
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,