c++-变量,this指针,全局函数,成员函数,自定义数组类
区分变量属于哪个对象
- c++对象管理模型初探
- C++类对象中的成员变量和成员函数是分开存储的,C中内存四区仍然有效
- C++编译器对普通成员函数的内部处理(隐藏this指针)
- this指针解决函数形参和类属性相同
- 类成员函数写const,修饰的是谁?
- 全局函数 pk 类成员函数
- 类成员函数返回指针 和 返回引用
- C++类对象中的成员变量和成员函数是分开存储的,C中内存四区仍然有效
- C++编译器对普通成员函数的内部处理(隐藏this指针)
- this指针解决函数形参和类属性相同
- 类成员函数写const,修饰的是谁?
- 全局函数 pk 类成员函数
- 类成员函数返回指针 和 返回引用
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
class Test
{
public:
Test(int i)
{
mI = i;
}
int getI()
{
//this就是指向调用改成员函数方法的对象地址
return this->mI;
//return mI;
}
private:
int mI;
};
/*
struct Test
{
int mI;
};
void Test_init(Test *pthis, int i)
{
pthis->mI = i;
}
int getI(struct Test *pthis)
{
return pthis->mI;
}
*/
int main(void)
{
Test t1(10);//Test(&t1, 10)
Test t2(20);
t1.getI();// getI(&t1)
return 0;
}
this指针
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
class Test
{
public:
Test(int k)
{
this->m_k = k;
}
int getK() const//成员函数尾部出现const 修饰是this指针
{
//this->m_k = 100; //this指针不是 const Test *
//this++;// this指针是一个常指针, Test *const
//this->m_k = 100;
//this = this + 1;
return this->m_k;
}
//static成员函数,只能返回static成员变量
static int s_getK()
{
//return m_k;
return s_k;
}
private:
int m_k;
static int s_k;
};
int Test::s_k = 0;
int main(void)
{
Test t1(10); //Test(&t1, 10);
Test t2(20);
return 0;
}
全局函数和成员函数
如果想返回一个对象的本身,在成员方法中,用*this返回
}
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
class Test
{
public:
Test(int a, int b)
{
this->a = a;
this->b = b;
}
void printT()
{
cout << "a = " << this->a << ", b=" << this->b << endl;
}
int getA()
{
return this->a;
}
int getB()
{
return this->b;
}
//成员方法
Test TestAdd(Test &another)
{
Test temp(this->a + another.a,this->b + another.b);
return temp;
}
//+= 方法
Test& TestAdd2(Test &another)
{
this->a += another.a;
this->b += another.b;
//this===>&t1
return *this;//如果想返回一个对象的本身,在成员方法中,用*this返回
}
private:
int a;
int b;
};
/*
//1 在全局提供一个两个Test想加的函数
Test TestAdd(Test &t1, Test &t2)
{
Test temp(t1.getA() + t2.getA(), t1.getB() + t2.getB());
return temp;
}
*/
int main(void)
{
Test t1(10, 20);
Test t2(100, 200);
//Test t3 = TestAdd(t1, t2);
Test t3 = t1.TestAdd(t2);
t3.printT();
//((t1 += t2) += t2 )+= t2
//如果相对一个对象连续调用成员方法,每次都会改变对象本身,成员方法需要返回引用。
t1.TestAdd2(t2).TestAdd2(t2);
t1.printT();
return 0;
}
自定义数组类
main.cpp
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <fstream>
#include "MyArray.h"
using namespace std;
int main(void)
{
MyArray array1(10);//开辟10元素的数组
//赋值操作
for (int i = 0; i < 10; i++) {
array1.setData(i, i + 10);
}
cout << "--------" << endl;
cout << "array1:" << endl;
for (int i = 0; i < 10; i++) {
cout << array1.getData(i) << " ";
}
cout << endl;
MyArray array2 = array1;
cout << "array2:" << endl;
for (int i = 0; i < array2.getLen(); i++) {
cout << array2.getData(i) << " ";
}
cout << endl;
MyArray array3;
array3 = array1;
cout << "array3:" << endl;
for (int i = 0; i < array3.getLen(); i++) {
cout << array3.getData(i) << " ";
}
cout << endl;
return 0;
}
Array.h
#pragma once
#include <iostream>
using namespace std;
class MyArray
{
public:
MyArray();
MyArray(int len);
MyArray(const MyArray &another);
~MyArray();
void setData(int index, int data);
int getData(int index);
int getLen();
void operator=(const MyArray& another);
private:
int len;
int *space;
};
Array.cpp
#include "MyArray.h"
MyArray::MyArray()
{
cout << "MyArray()..." << endl;
this->len = 0;
this->space = NULL;
}
MyArray::MyArray(int len)
{
if (len <= 0) {
this->len = 0;
return;
}
else {
this->len = len;
//给space开辟空间
this->space = new int[this->len];
cout << "MyArray::MyArray(int len) ..." << endl;
}
}
MyArray::MyArray(const MyArray &another)
{
if (another.len >= 0) {
this->len = another.len;
//深拷贝
this->space = new int[this->len];
for (int i = 0; i < this->len; i++) {
this->space[i] = another.space[i];
}
cout << "MyArray::MyArray(const MyArray &another) ..." << endl;
}
}
MyArray::~MyArray()
{
if (this->space != NULL) {
delete[]this->space;
this->space = NULL;
len = 0;
cout << "MyArray::~MyArray() ..." << endl;
}
}
void MyArray::setData(int index, int data)
{
if (this->space != NULL) {
this->space[index] = data;
}
}
int MyArray::getData(int index)
{
return this->space[index];
}
int MyArray::getLen()
{
return this->len;
}
void MyArray::operator=(const MyArray& another)
{
if (another.len >= 0) {
this->len = another.len;
//深拷贝
this->space = new int[this->len];
for (int i = 0; i < this->len; i++) {
this->space[i] = another.space[i];
}
cout << "MyArray::operator=(const MyArray& another) ..." << endl;
}
}
c++-变量,this指针,全局函数,成员函数,自定义数组类的更多相关文章
- this指针和const成员函数
1.this指针 1)this指针是成员函数的隐式参数,成员函数通过this指针来访问调用它自己的那个对象,成员函数对各成员的访问均通过this进行 2)当某个对象调用它的成员函数时,编译器会把这个对 ...
- c++全局函数 && 成员函数
#include<iostream> using namespace std; class Test { public: Test(, ) { this->a = a; this-& ...
- this指针与const成员函数
this指针的类型为:classType *const // 即指向类类型非常量版本的常量指针 所以,我们不能把this绑定到一个常量对象上 ===> 不能在一个常量对象上调用普通的 ...
- 为什么NULL指针也能访问成员函数?(但不能访问成员变量)
查看更加详细的解析请参考这篇文章:http://blog.51cto.com/9291927/2148695 看一个静态绑定的例子: 1 #include <iostream> 2 3 u ...
- C++基础 (4) 第四天 this指针 全局函数和成员函数 友元 操作符重载
1static强化练习-仓库进货和出货 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; c ...
- C++类内存布局图(成员函数和成员变量分开讨论)
一.成员函数 成员函数可以被看作是类作用域的全局函数,不在对象分配的空间里,只有虚函数才会在类对象里有一个指针,存放虚函数的地址等相关信息. 成员函数的地址,编译期就已确定,并静态绑定或动态的绑定在对 ...
- 成员函数指针与高性能C++委托
1 引子 标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(delegate)”)在一些语言中已经证明了它宝贵的价值. ...
- [转]成员函数指针与高性能的C++委托
原文(作者:Don Clugston):Member Function Pointers and the Fastest Possible C++ Delegates 译文(作者:周翔): 成员函数指 ...
- 第24课.经典问题解析(1.析构函数的顺序;2.const修饰对象;3.成员函数,成员变量是否属于具体对象)
1.当程序中存在多个对象的时候,如何确定这些对象的析构顺序? 单个对象 单个对象创建时构造函数的调用顺序 a.调用父类的构造函数 b.调用成员变量的构造函数(调用顺序与声明顺序相同) c.调用类自身的 ...
随机推荐
- 新闻实时分析系统Hive与HBase集成进行数据分析
(一)Hive 概述 (二)Hive在Hadoop生态圈中的位置 (三)Hive 架构设计 (四)Hive 的优点及应用场景 (五)Hive 的下载和安装部署 1.Hive 下载 Apache版本的H ...
- 运用python实现冒泡排序算法
冒泡排序,一个经典的排序算法,因在算法运行中,极值会像水底的气泡一样逐渐冒出来,因此而得名. 冒泡排序的过程是比较两个相邻元素的大小,然后根据大小交换位置,这样从列表左端开始冒泡,最后最大值会依次从右 ...
- 折腾笔记-计蒜客T1158-和为给定数AC记
欢迎查看原题 1.简单题目叙述 蒜头君给出若干个整数,询问其中是否有一对数的和等于给定的数. 输入格式 共三行: 第一行是整数 ),表示有 n 个整数. 第二行是 n 个整数.整数的范围是在 0 到 ...
- C#学习笔记05--枚举/结构体
一.枚举 当变量的取值范围是固定的几个时, 就可以使用枚举类型, 这样会更加简洁方便 1.1.定义: 访问修饰符 enum 枚举类型名 { 成员1, 成员2, 成员3, ... } publi ...
- 删除排序数组中的重复项II
Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twic ...
- Java快速教程步伐
Java基础在Java基础系列文章中,我将说明Java的基础内容,特别是面向对象的相关概念. Java基础01 从HelloWorld到面向对象 Java基础02 方法与数据成员 Java基础03 构 ...
- Spring Data JPA 条件查询的关键字
Spring Data JPA 为此提供了一些表达条件查询的关键字,大致如下: And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(Stri ...
- 第二章 Unity Shader基础
[TOC] 1. Unity Shader 的基础: ShaderLab 学习和编写着色器的过程一直是一个学习曲线很陡峭的过程,通常情况下为了自定义渲染效果往往要和很多文件和设置打交道,这些设置很容易 ...
- Reactive(1) 从响应式编程到"好莱坞"
目录 概念 面向流设计 异步化 响应式宣言 参考文档 概念 Reactive Programming(响应式编程)已经不是一个新东西了. 关于 Reactive 其实是一个泛化的概念,由于很抽象,一些 ...
- Python-TCP客户端程序开发
TCP客户端,需要与服务端建立连接,连接建立成功后才可以进行数据的传输. # 1.导入模块 import socket if __name__ == '__main__': # 2.创建套接字对象 t ...