C++ 初识

认识C++

编译运行步骤
编辑(.cpp .h) 编译(形成.obj) 链接(.exe) 执行(装载程序进入内存) 调试

函数原型 int area(int,int); 等价于 int area(int a,intb); 类似java 的接口
命名空间 using namespace std;
预处理命令 符号 "#"开头

引用
关键字 & 如Type &a=object; a实际会指向对象

  1. 创建时必须初始化
  2. 初始化对象引用后不能更改
  3. 不能是null

const 限定符
int * const p=&a; 指针指向的内存地址不能变 ,地址的值可以变
const int * const p=&a; 地址和值都不能变

动态分配内存
关键字 new 如 Type *p=new int //没有初始值 Type *p=new int(10); //有初始值 int *p1=new int[10]; //初始化数组 等式左边为指针

释放内存
delete p; //释放数组用 delete[] p

void * p;//表示P指针的类型不确定

String 对象

string str1="i am lili!";           //类与java不一样 , 类不需要大写
string str2("who are you!);
string str3=str1.substr(2,2);    //截取第2个字符
int i=str1.find("am",0)  //第0个开始查找 字符串在主串的位置

返回值
int & index(int i); //返回引用的函数
类型标识符 * 函数名(参数列表); //返回指针
string input(const int m) //返回对象

inline关键字
C编辑器 执行到该关键字修饰的函数时不产生实际函数调用,而是用函数体替换调用表达式。

函数的默认参数
在原型中定义 如 void f(int a,int b=1,int c=2 ) //默认参数写右边(不能写左边,因是从左到右匹配)
如果调用给出实参,则用实参,如果没有给出,则用预先声明的默认形参值.

扫描二维码关注公众号,回复: 9987589 查看本文章
int add(int x=5,int y=6){}

new创建生命周期可控的对象 Point * pt1=new Point;

复制构造函数
类名::类名(const 类名&引用对象名)

  1. 也是一种构造函数,不能指定函数返回类型。
  2. 只有一个参数,是对同类的某个对象的引用。
  3. 没一个类都有一个复制构造函数
析构函数
Point();
  1. 一个类只有一个,没有参数,不能重载
  2. 撤销对象时,调用析构函数。
  3. 不指定返回类型

函数模板 template <class T> 或 template <typename T>

template <class T> T max(T m1,T m2){ 
    return (m1>m2)?m1:m2;
}

传值(拷贝副本)

void sendValue(char ch){
      cout << ch << endl;
      cout << (ch=='a') << endl;
}

传地址(修改原地址)

void sendAddress(int * px,int * py){
        cout << px<< " " << py <<endl;
}

传引用

void sendAddress(int &a,int &b){
        cout << a<<" "<< b<<endl;
        a=100;
}

类和对象

类声明

class 类名{
          函数和数据    // 不说明访问权限,默认是私有的 
    private:
         私有数据和函数    //只可在本类中访问
         int a,b;              //类体中不允许对数据成员初始化  如 int a(2),b(3); 是错误的  产生具体对象时才有意义
    public:
         公有函数和数据      //通过该访问权限修饰的函数来访问私有
         void Display();       //函数原型(声明函数)
         void Setab(int m,int n){           //类体内定义  默认为inline 
              
         }
    protected:
         保护数据和函数       
}

返回类型 类名::成员函数名(参数列表){    //在类体外定义成员函数 需要类名和作用域运算符  ::
      函数体  //内部实现
}

inline 返回类型 类名::成员函数名(参数列表){    //在类体外定义成员函数(内联)
      函数体  //内部实现
}

使用类的对象

Point p1,p2;
Point *p =&p1;
Point &p3=p2;
p1.Setab(5,10);  //对象和引用   调用函数
p->Display();  //指针访问
p3.Setab(1,2);   //引用   调用函数

静态成员
静态成员必须初始化
数据类型 类名::静态数据成员名=初始值;

类体内初始化:
static int s;
类体外初始化:
int Point::count=0;

友元函数
友元函数是独立与当前类的外部函数,
但它可以访问该类的所有成员

友元可以是类或函数

class Point{
private:

public:
friend double distances(Point &,Point&); //声明友元函数
}

double distances(xxxx){}//定义友元函数

const对象
常量成员(常数据成员,常引用(只能在构造函数初始化),静态常数据成员((在类体外初始化))
const
成员函数-> 常成员函数
对象->常对象 //只能调用他的常成员函数,不能调用其他的成员函数

继承和派生

单一继承
class 派生类名称:访问控制 基类{
p
p
p
}

构造函数的执行顺序:
1.调用基类的构造函数初始化基类成员(基类从左向右).
2.对新增成员初始化,上到下
3.执行派生类的构造函数体

类的保护成员
protected
派生类对基类的保护成员访问与公有成员的访问相同
派生类对象对基类保护成员访问与私有成员的访问相同

基类 派生类的成员函数对基类的访问 基类对象(派生类对象) 外部函数
private 不可访问 不可访问 不可访问
protected protected 不可访问 不可访问
public public 可访问 可访问

私有派生:子类私有派生了爷爷类,则孙子类不可以直接调用爷爷类的方法

保护派生:子类保护派生了爷爷类,则爷爷类是保护的成员属性在子类还是保护。(私有不可继承)

二义性和支配规则

作用域运用符和成员名限定,派生支配基类的同名函数
obj.Base1::fun() obj.Base2::fun()

virtual函数

发布了7 篇原创文章 · 获赞 0 · 访问量 111

猜你喜欢

转载自blog.csdn.net/weixin_37979099/article/details/103882647