一.如何调用成员函数
1.对象调用成员函数
#include<iostream> using namespace std; class Person { public: void sayHello() { cout << "Hello!" << endl; } int i; }; int main() { Person p; p.sayHello();//对象调用成员函数 cout<<p.i<<endl; return 0; }
对象.属性或对象名
2.指针调用
#include<iostream> using namespace std; class Person { public: void sayHello() { cout << "Hello" << endl; } }; int main() { Person* p = new Person();//new操作符在堆上动态分配了一个内存空间来存储一个Person对象, //然后调用默认的构造函数Person()来初始化这个Person对象,然后返回一个指向该对象的指针 p->sayHello(); delete p;//释放p所指向的动态分配的内存空间,而不是释放p本身 return 0; }
3. 通过引用调用
#include<iostream> using namespace std; class Person { public: void sayHello() { cout << "Hello" << endl; } }; int main() { Person& p = *(new Person());//使用new关键字在运行的时候动态分配内存为Person类型, //然后用指针、解引用、引用操作来创建该类型的引用p // 记住:&用在对象前面时只有引用的作用,就会创建一个指向该对象的别名 // &在声明引用的时候不是在内存中创建一个新的对象,而是创建该对象的一个新的别名 // &声明一个指向Person对象的引用,这个引用被命名为P, // 该引用的类型是"Person&",而不是"Person*" // 这个p是引用,不是对象;p也是指向这个对象的一个指针 //new Person()在堆区分配一个新的对象 //*(new Person())返回一个Person对象详 p.sayHello();//引用调用 delete &p;//delete时需要传递该指针指向的地址,用&p就可以获得指针所指向内存的地址, //而不是传递指针p本身 return 0; }
4.在成员函数内通过this指针来调用其他成员函数
#include<iostream> using namespace std; class Person { public: void sayHello() { cout << "Hello!" << endl; this->sayWorld();//this指针的对象是当前调用成员函数的对象,即this指向的是p; //等价于直接调用sayHello(); } void sayWorld() { cout << "World" << endl; } }; int main() { Person p; p.sayHello(); return 0;
this指针的对象是当前调用成员函数的对象,即this指向的是p;
二.如何调用成员变量
1.对象实例调用成员变量
成员变量为公有:
可以直接通过对象实例来访问它
class MyClass { public: int publicVar; }; int main() { MyClass obj; obj.publicVar = 10; // 设置成员变量的值 int value = obj.publicVar; // 获取成员变量的值 return 0; }
成员变量为私有:
需要通过公共的成员函数(如get和set)来访问
class MyClass { private: int privateVar; public: void setPrivateVar(int value) { privateVar = value; } int getPrivateVar() const { return privateVar; } }; int main() { MyClass obj; obj.setPrivateVar(10); // 设置私有成员变量的值 int value = obj.getPrivateVar(); // 获取私有成员变量的值 return 0; }
set和get函数的作用:
由于成员变量我们一般设置为私有,在类外部不能直接访问,所以我们需要设计公有的set()函数和get()函数来访问它;set()函数是指修改私有成员变量的值的那类函数;
get()函数是指输出,打印,读取私有成员变量的值的那类函数;
所以一般set()函数和get()函数是对应的;这体现了面向对象编程中的封装性:这里set()函数和get()函数就相当于是对外界提供的一个接口,外界只有通过这种接口才能访问到内部的值。
2. 通过对象指针调用成员变量
如果使用对象指针,你需要使用
->
操作符,并且需要对对象分配内存class MyClass { public: int publicVar; }; int main() { MyClass* objPtr = new MyClass(); objPtr->publicVar = 10; // 设置成员变量的值 int value = objPtr->publicVar; // 获取成员变量的值 delete objPtr; return 0; }
3. 通过对象引用调用成员变量
如果使用对象引用,你可以直接使用
.
操作符,就像使用对象实例一样(起别名)class MyClass { public: int publicVar; }; int main() { MyClass obj; MyClass& objRef = obj; objRef.publicVar = 10; // 设置成员变量的值 int value = objRef.publicVar; // 获取成员变量的值 return 0; }
三.C++中的包含防护
1.定义:
格式:以Time类为例
#ifndef TIME_H #define TIME_H ...... #endif
命名惯例:字母全部大写,并且用‘_’代替‘.’
2.作用
(1)避免头文件中的代码被多次包含到同一个源代码文件中
(2)避免类的重复定义