构造器(constructor)

1.与类名相同,无返回,被系统生成对象时自动调用,用于初始化。

2.可以有参数,构造器的重载,有默认参数。重载和默认参数不能同时出现,但是一定要包含标配(无参数的构造器),为了对象的午无参创建。

3.如果未提供任何构造器,系统默认提供一个无参的构造器。如果提供,则不再生成默认构造器。

#ifndef STACK_H
#define
class Stack
{
public:
Stack()//构造器,
{
top = 0;
space = new char[size];
}
Stack(int size = 100)//构造器与构造器之间是重载的关系
{
top = 0;
space = new char[size];
_size = size;
}
public:
//void init();
bool isEmpty();
bool isFull();
void push(int data);
int pop();
private:
int space[1024];
int top;
int _size;
};
#endif

stack.cpp:

#include<iostream>
#inlcude "stack.h"
#include<stdlib.h>
#include<string.h>
bool Stack::isEmpty()
{
return top == 0;
}
bool Stack::isFull()
{
return top == 1024;
}
void Stack::push(int data)
{
space[top++] = data;
}
int Stack::pop()
{
return space[--top];
}

main.cpp

#include<iostream>
#include "stack.h"
using namespace std;
int main()
{
Stack s;
Stack s2(100);
//s.init();
for(char v = "a";!st.isFull()&& v != 'z'+1;v++)
{
st.push(v);
}
while(!s.isEmpty())
cout<<s.pop()<<endl;
return 0;
}

析构器(destructor)"~"

1.~与类名相同,无参,无返回。

2.对象消失的时候,自动被调用,用于对象销毁是的处理工作。

3.如果未提供任何构造器,系统会自动生成一个空析构器。

#ifndef STACK_H
#define
class Stack
{
public:
Stack()//构造器,
{
top = 0;
space = new char[size];
}
Stack(int size = 100)//构造器与构造器之间是重载的关系
{
top = 0;
space = new char[size];
_size = size;
}
~Stack()
{
delete sapce;//适合于new生成的空间
}
public:
//void init();
bool isEmpty();
bool isFull();
void push(int data);
int pop();
private:
int space[1024];
int top;
int _size;
};
#endif
#include<iostream>
#include "stack.h"
using namespace std;
int main()
{
Stack s;
Stack s2(100);
//s.init();
for(char v = "a";!st.isFull()&& v != 'z'+1;v++)
{
st.push(v);
}
while(!s.isEmpty())
cout<<s.pop()<<endl;
return 0;
}

C:

struct Stu
{
char *name;
int age;
}
int main()
{
Stu *ps = (Stu*)malloc(sizeof(Stu));
ps->name = (char *)malloc(100);//给name也要申请空间
strcpy(ps->name,"xxx");
free(ps->name);//释放的时候也要从里向外释放。
free(ps); return 0;
}

C++:

class Stu
{
char *name;
int age;
public:
Stu()
{
name = new char[100];
}
~Stu()
{
delete []name;//释放构造器中new出来的空间
}
}
int main()
{
Stu *ps = new Stu;
strcpy(ps->name,"assassin");
delete ps;//释放上述new出的空间 return 0;
}
/*
Stu *p = new Stu;生成八个字节的空间,p指向8个字节,Stu的构造器生成100个字节,name指向这100个字节。delete ps,调用了析构函数,析构函数先释放100个字节的空间,再释放掉8个字节的空间。
*/

自实现string类

main.cpp

#include <iostream>
#include "myString.h"
using namespace std; int main()
{
string s; //char * _str = "";
string s2 = "assassin"; //char * str = "xxxx";
cout<<s.c_str()<<endl;
cout<<s2.c_str()<<endl; String ss;
String sss = "intelwisd";
cout<<ss.c_str()<<endl;
cout<<sss.c_str()<<endl;
return 0;
}

myString.h:

#ifndef STRING_H
#define STRING_H class String
{
public:
String();
String(const char *s);
char * c_str();//利用此函数输出
private:
char * _str;
}; #endif // STRING_H

myString.cpp

#include<iostream>
#include "string.h"
#include "myString.h"
using namespace std; String::String()
{
_str = new char[1];
*_str = '\0';//字符
} String::String(const char *s)
{
int len = strlen(s);
_str = new char[len+1];
strcpy(_str,s);
}
char * String::c_str()
{
return _str;
}

改进:

myString.h文件

#ifndef STRING_H
#define STRING_H #if 0
class String
{
public:
String();
String(const char *s);
char * c_str();
private:
char * _str;
};
#endif
class String
{
public:
//String();
String(const char *s = NULL);//无参的形式包含在里面
char * c_str();
~String();
private:
char * _str;
}; #endif // STRING_H

myString.cpp文件:

#include<iostream>
#include "string.h"
#include "myString.h"
using namespace std;
#if 0
String::String()
{
_str = new char[1];
*_str = '\0';//字符
} String::String(const char *s)
{
int len = strlen(s);
_str = new char[len+1];
strcpy(_str,s);
}
#endif
String::String(const char *s)
{
if(s == NULL)
{
_str = new char[1];
*_str = '\0';
}else{
int len = strlen(s);
_str = new char[len+1];
strcpy(_str,s);
} } char * String::c_str()
{
return _str;
}
String::~String()
{
delete []_str;
}

main.cpp:文件

#include <iostream>
#include "myString.h"
using namespace std; int main()
{
string s; //char * _str = "";
string s2 = "assassin"; //char * str = "xxxx";
cout<<s.c_str()<<endl;
cout<<s2.c_str()<<endl; String ss;
String sss("intelwisd");
cout<<ss.c_str()<<endl;
cout<<sss.c_str()<<endl; return 0;
}
    string *ps = new string("assassin");
delete ps;
string *ps1 = new string("assassin1");
delete ps1;

ps指向new生成一个四个字节的空间char *,char *指向一串字符。delete ps时,先释放掉内部一串字符,再释放掉char *。

C/C++(C++类与对象)的更多相关文章

  1. Java编程里的类和对象

    像我们搞计算机这块的,都知道这么一件事,当前的计算机编程语言主要分为两大块,一为面向过程,二为面向对象.Java就是一门纯面向对象的语言.学习了一个月左右的Java,在下对于Java当中的类和对象有了 ...

  2. Python - 类与对象的方法

    类与对象的方法

  3. C++基础知识(5)---类和对象

    终于把C++中的基础在前面的几篇博客中总结完了,可能还有一些语法还没有总结到,没关系,以后用到了再查资料就好.类是C++中的一个非常重要的概念,这是区别你使用的C++到底是面向过程还是面向对象的一个重 ...

  4. 简述JavaScript对象、数组对象与类数组对象

    问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...

  5. 前端学PHP之面向对象系列第一篇——类和对象

    × 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...

  6. Objective-C Runtime 运行时之一:类与对象

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...

  7. [Java入门笔记] 面向对象编程基础(一):类和对象

    什么是面向对象编程? 我们先来看看几个概念: 面向过程程序设计 面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实 ...

  8. 解析Java类和对象的初始化过程

    类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来 ...

  9. 02OC的类和对象

    这章重点介绍OC的类以及对象,由于C语言是面向过程语言,而OC只是对于C语言多了一些面向对象的特性,所以OC相对于其他面向对象语言,例如C#.Java等没有那么多的语法特性,所以差别还是比较大的. 一 ...

  10. swift基础:第六部分:类与对象

    http://reactnative.cn/docs/0.24/getting-started.html#content(react Native 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...

随机推荐

  1. EEPlat PaaS中的多租户数据隔离模式

    EEPlat PaaS支持三种租户的数据隔离技术:Sparce Column.tenantId字段隔离.每一个租户独立数据库. 1)Sparce Column,和Salesforce Appforce ...

  2. Experience Design for Sexable Forum

    Mars March 16, 2015

  3. JAVA学习第四十六课 — 其它对象API(二)Date类 &amp; Calendar类(重点掌握)

    Date类(重点) 开发时,会时常遇见时间显示的情况,所以必须熟练Date的应用 <span style="font-family:KaiTi_GB2312;font-size:18p ...

  4. Linux多线程实践(六)使用Posix条件变量解决生产者消费者问题

    前面的一片文章我们已经讲过使用信号量解决生产者消费者问题.那么什么情况下我们须要引入条件变量呢? 这里借用  http://www.cnblogs.com/ngnetboy/p/3521547.htm ...

  5. hpuoj--校赛--送给新生的礼物(水题)

    问题 A: 感恩节KK专场--送给新生的礼物 时间限制: 1 Sec  内存限制: 128 MB 提交: 631  解决: 187 [提交][状态][讨论版] 题目描述 学长KK要送给学弟学妹们礼物, ...

  6. P 值(p value)与统计检验

    P 值是最常用的一个统计学指标,几乎统计软件输出结果都有P值. 统计学的观点,超过一定基准(比如 5%,其实是低于5%),就不能简单地认为这是偶然事件了,而是受到了外在的影响. 一般而言,为了确定从样 ...

  7. Android项目实战(五十六):获取WebView加载的url的请求错误码

    例如需求,我有一个WebView 加载一个url, 该url对应的网页本身自带下拉刷新 ,但是网页本身会有出现400 500 等异常请求错误码 这时候网页加载失败,页面本身的下拉是无法使用的,要求重新 ...

  8. PostgreSQL Replication之第四章 设置异步复制(2)

    4.2 配置级联复制 正如您在本章已经看到的,设置流复制真的很容易.只需要设置几个参数,做一个基础备份,并享受您的复制设置. 在许多情况下,这种情况更有一点点微妙.在这个例子中我们假设:我们要使用一个 ...

  9. RMAN备份脚本--DataGuard primary

    单机环境全备   export ORACLE_BASE=/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1 export ORACL ...

  10. 运维派 企业面试题1 监控MySQL主从同步是否异常

    Linux运维必会的实战编程笔试题(19题) 企业面试题1:(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员.提示:如果没主从同步环境,可以用下面文本放到文件里读 ...