c++面向对象基础
来源:互联网 发布:数据分析有发展前途 编辑:程序博客网 时间:2024/05/08 04:37
面向对象编程一般分为两个文件,头文件和源文件,例如一个Person 类,分为Person.h和Person.cpp
Person.h中有类,函数的声明:
#pragma once //该文件不会被编译多次#include <string> //引入string #include "Person.h"using namespace std; //命名空间,没有这个, string也是不能用的class Person {private:int m_iAge; //命名规范,m表示member, i表示类型, 之后是变量名(pc的那个就是用的这个规范)const string m_strName; //只读变量,定义后不可修改,可以在初始化列表中赋值public:Person(void);//构造函数Person(int age);~Person(void);//析构函数//get set方法string getName(); void setAge(int age);int getAge();};
在Person.cpp中,是类函数的实现:
#include "Person.h" //引入头文件,类方法的声明#include <string>#include <iostream>using namespace std;Person::Person(int age):m_iAge(age){//初始化列表,只能用在构造函数中,在构造函数之前执行cout << "constructor(int age)" << endl << this->m_iAge << endl;}int Person::getAge(){return m_iAge;}void Person::setAge(int age){this->m_iAge = age;}string Person::getName(){return m_strName;}Person::Person(void):m_iAge(18), m_strName("xxf") //初始化列表,主要用于对只读变量的赋值{cout << "constructor()" << endl<< this->m_iAge << endl<< this->m_strName << endl;}Person::~Person(void){cout << "destroy" << endl;}
#include "Person.h"#include <iostream>using namespace std;int main(){Person p1;//栈中申请内存Person p2(15);Person *p3 = new Person(15);//堆中申请内存p2.setAge(16);cout << "p1.getAge():" << p1.getAge() << endl;cout << "p2.getAge():" << p2.getAge() << endl;cout << "p3->getAge():" << p3->getAge() << endl;//在栈中的变量不用手动清理内存//在堆中的变量用手动清理内存delete p3;p3 = NULL;system("pause");return 0;}
输出结果:
从输出可以看出:
1,构造函数和析构函数何时执行
2,在构造函数执行时,初始化列表就已经执行完毕了,变量已经有值了
3,在堆中的内存要用delete表达式清除,在栈中的内存中会在运行完后自动清除(通过debug,就可以看到在return 0; 之后会执行两次~Person())
0 0
- 【C#】面向对象基础
- Objective-C 面向对象基础
- Object-C 面向对象基础
- C#VS面向对象基础(二)
- 纯c面向对象基础示例
- Objective-C 面向对象基础-类
- Objective-C 面向对象基础-构造方法
- Objective-C基础(面向对象-上)
- 【C++】C++基础学习之面向对象
- [C++][基础]7_面向对象
- 面向对象(面向基础)
- IOS开发之路-Objective-C 面向对象编程基础
- Objective-C基础——面向对象语法02
- Objective-C基础——面向对象语法03
- Objective-C基础——面向对象语法04
- 黑马程序员--iOS--Objective-C基础 (面向对象)
- Objective-C 基础一:面向对象过程基础知识
- 【C#】面向对象基础—属性、方法、结构
- leveldb代码阅读(14)——Level和Compaction
- 欢迎使用CSDN-markdown编辑器
- ireport设置自定义字段换行
- jQuery 获取当前url各种信息
- UML类图与对象图
- c++面向对象基础
- ImageLoader加载图片 默认方式和自定义方式
- android 自定义Toast
- linux 网络编程(加部分原创)
- VB.NET 实现DataGridView CheckBox列状态变更触发事件,获取其状态值
- Maven编译类文件常见错误解决方法
- 宏 GENERATED_UCLASS_BODY() 与 GENERATED_BODY() 简析
- 关于Linux内核网络架构书籍收集
- iOS开发判断身份证号是否合法