C++入门篇四
常量引用:形参不能修改,节省开辟内存空间的开销
用一级指针代替二级指针
常量引用,使用场景,修饰形参为只读
const int a=10会分配内存
如果使用引用,在前面加了一个const的话,那么就不可以修改形参
void test01(const int &b) {
cout << "b=" << b << endl;
}
const int f=43;//这个f是在全局里面,不可以在修改的,不可以使用引用,用指针int *p=(int*)&f;,不可以对*p进行操作,f的值是全局常量,不可以在修改了,*p的值是43
void s1() {
int a = 304;
test01(a);
int *c = &a;
const int &b = 5;//加了const的话,不可以在修改了,引用,int &d=b;真正的一个常量
int *p = (int*)&b;//使用指针取地址
*p = 434;
cout << "p=" << b << endl;
const int v = 43;//真正的一个常量,可以初始化数组,在C中不可以这样,C++可以
int arr[v];//初始化数组,
}
int main() {
s1();
system("pause");//阻塞,可以暂停
return EXIT_SUCCESS;//退出返回,返回正常退出
//cout << "hello" << endl;
}
const给常量分配内部空间,在进行重新赋值
//int &ref=43;//这样可以的,不可以分配内存空间
const int &ref=43;const可以额外分配内存空间,相当于是int temp=43;const int &ref=temp;
//ref=54;//这样是不可以的
//用指针来取到地址
int *p=(int*)&ref;//前面不能加const,否则是常量
*p=33;//此时已经改变了
cout<<"ref="<<ref<<endl;//此时打印的结果为33,已经改变了
如果是常量的话,要修改值的话,可以用指针的形式,取到地址然后在进行下一步的操作,如果前面加了const是常量,是不可以修改的,要修改的可以使用指针,const可以分配内存空间
类的设计:
设计类,抽象类
class 类名{
public 公共权限
设置成员属性
设置成员函数
}
使用类 创建对象,实例化对象
类名 对象名
类和对象的关系:
类是对象的抽象
对象是对类的实例
求圆的周长:
#include "pch.h"
#include<iostream>
using namespace std;
//尽量不使用define
//#define Max=100;
const double pi=32;
//设计一个类
//class代表的是关键字,后面紧跟和这个是类名
//周长
class Circle
{
public://如果没有加这句的话,那这类里面的方法就取不到
//public//公共权限
double getres() {//在这里用来double,所以不需要加括号来获取值
return m_r *pi* 2;//注意这个函数是double的类型,所哟注意这个返回值也要double的类型
}
//成员函数可以修改成员属性,传参数进来进行过赋值操作
void getr(int r) {
m_r = r;//对半径进行赋值
}
int m_r;
};
int main() {
int r = 4;
Circle c1;//对象都可以抽象出来一个类,c1是抽象出来的类
c1.getr(3);//传半径进去,进行赋值操作,传参数进去进行赋值操作
//double res = c1.getres;
cout << "res=" << c1.getres() << endl;
}
设计学生类:
#include <string>
class Stu{
public://注意,在这里要加public,公共权限才可以的
int xuhao;
string name;
//成员函数可以修改成员属性
void getid(int num){
xuhao = num;
};
void getname(string n) {
name = n;
};
};
void s2() {
Stu s;
s.getid(3);
s.getname("alex");
cout << "学号:" << s.xuhao << "姓名:" << s.name << endl;
}
int main() {
s2();
}
内联函数:inline,解决了宏缺陷的问题(#define),宏缺陷,作用域,类型,一些运算
//宏,作用域,类型
//定义一个加法
#define MyAdd(x,y) x+y //要这样使用(x)+(y)》》有缺陷
//宏缺陷,作用域,类型,++
//内联函数注意事项
//内联函数声明
inline void func();
void func() {//要加inline关键字
//类内部的成员函数会默认加iline关键字
}
以下几种情况不能有过多考虑
1.不能存在任何形式的循环语句
2.不能存在过多的条件判断语句
3.函数体积不能过于庞大
4.不能对函数进行取地址操作
内联函数总结:
//内联函数解决了宏缺陷的问题
//给编译器一个建议,加上关键字
//成员函数默认会加上关键字,inline
//编译器有时候会默认加inline