三、C++学习_面向对象(带C语言基础)

三、C++学习_面向对象(带C语言基础)

面向对象编程

所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解和刻画客观世界和设计、构建相应的软件系统(模拟现实)。

对象:由数据和容许的操作组成的封装体,与客观实体有对应关系;

面向对象不是一种语言的特性,而是一种编程思想。

  • 抽象和类

抽象:从具体事物抽取共同的本质特征;

类:将一种抽象转换为用户定义类型工具;

class LandOwner {
public:
    LandOwner();//默认构造函数
    ~LandOwner();//默认析构函数
    string name;
    ...
    //成员内容    
}
  • 访问修饰符
public://修饰的成员在任意地方都可以访问
private://修饰的成员只能够在类中或友元函数中可以访问
protected://修饰的成员可以在类中函数、子类函数、以及友元函数中访问

  • 构造函数
//以类名作为函数名
//无返回值类型
//初始化对象的数据成员
//类对象被创建时,编译器为对象分配内存空间,并自动调用构造函数以完成成员的初始化
//种类:无参构造、一般构造(重载构造)、拷贝构造

//无参构造(默认构造)
LandOwner::LandOwner();
//一般构造(重载构造)
LandOwner::LandOwner(){
//内容
}

//带参构造 : 初始化参数列表
LandOwner::LandOwner(int a, string b, ...) : m_a(a), m_b(b);
//或
LandOwner::LandOwner(int a, string b, ...){
//内容
}

//复制构造函数 自定义string类、
class String{
public:
    String();
    String(cahr *str = "");
    friend ostream &operator<<(ostream &os, const String &str);
    //重载运算符 复制对象而非复制地址
    String &operator=(String &str);
    virtual ~String();
private:
    int length; //长度 不包括尾零
    char *value; //字符串指针
}
String::String() : length(0){
    this->value = new char[length+1];
    this->value[0] = '\0';
}
String::String(char *str){//使用时 String str = "xxx"; 即可
    //空指针检查 略
    length = strlen(str);
    value = new char[length + 1];
    strcpy(vslue, str);
}

//复制构造!!!!!!!!!!!!
String::String(const String &str){
    length = str.length;
    >value = new char[length + 1];
    strcpy(value, str.value);
}
String::String &operator=(String &str){	
    //自我复制检查 略
    delete[] this->value;
    length = str.length;
    this->value = new char[length + 1];
    strcpy(this->value, str.value);
    
    return *this;
}

String::~String(){
    delete[] this->value;
}

  • 析构函数
//对象过期时自动调用特殊成员函数(栈内存)
//析构函数用来释放资源,而非销毁
//new 出来的要 delete
  • 实例化

第一种:栈内存中创建:类似声明变量

自定义类型名 对象名[([参数列表])];

对象由系统创建并释放,不用担心会出现内存泄漏,生命周期只在声明区域的大括号内,栈内的存取速度快,但是缺乏灵活性。

第二种:堆内存中创建:需要 new 关键字

类型名 指针 = new 类型名[([参数列表])];

auto 指针 = new 类型名[([参数列表])]; //变量类型自动推断,定义时必须初始化,不能用sizeof

必须使用 delete 释放内存,灵活但危险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值