三、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 释放内存,灵活但危险。