【C++primer第七章 函数】教程文章相关的互联网学习教程文章

深入理解C++中内联inline函数和宏定义的区别

inline函数是C++引入的机制,目的是解决使用宏定义的一些缺点。 内联函数与宏定义区别 (1)内联函数在编译时展开,宏在预编译时展开; (2)内联函数直接嵌入到目标代码中,宏是简单的做文本替换; (3)内联函数有类型检测、语法判断等功能,宏没有; (4)inline函数是函数,宏不是; (5)宏定义时要注意书写(参数要括起来)否则容易出现歧义,内联函数不会产生歧义; 为什么要引入内联函数? 用内联函数替代宏定义,消除宏定...

C++虚函数【图】

C++虚函数详解 前言 C++的特性使得我们可以使用函数继承的方法快速实现开发,而为了满足多态与泛型编程这一性质,C++允许用户使用虚函数 (virtual function) 来完成 运行时决议 这一操作,这与一般的 编译时决定 有着本质的区别。 虚函数表实现原理 虚函数的实现是由两个部分组成的,虚函数指针与虚函数表。 虚函数指针 虚函数指针 (virtual function pointer) 从本质上来说就只是一个指向函数的指针,与普通的指针并无区别。它指向...

c++---静态成员变量与静态成员函数

普通成员变量每个对象各自持有一份,而静态成员变量只有一份,被所有同类对象共享; 普通成员函数一定是作用在某个对象上的,而静态成员函数并不具体作用在某个对象上; 访问方式:访问普通成员时,要通过对象名.成员名的方式,指明要访问的成员变量是属于哪个对象的,或要调用的成员函数作用于哪个对象;访问静态成员时,则可以通过类名::成员名的方式访问,不需要指明被访问的成员属于哪个对象或作用于哪个对象。因此,甚至可以在...

C++面向对象入门(二十)友元成员函数【代码】

友元成员函数: 在类A的内部声明一个属于类B的成员函数, 则该成员函数可以访问类A的私有成员语法:class A;class B { 返回值类型 函数名(参数列表);};class A { friend 返回值类型 B::函数名(参数列表);};返回值类型 B::函数名(参数列表) {函数体}注意事项:1, 含有友元成员函数的类需要先定义, 被友元成员函数的访问的类要先声明2, 在书写有元函数的函数体时, 常常会有报错说使用类未完全定义的类的成员, 故一般的, 在友元成员函数所...

C++面向对象入门(十四)类对象成员对象和成员函数的分离存储【代码】

类成员变量(静态和非静态)和成员函数(静态和非静态)的存储特点当类无成员变量时, 类对象所占的内存为1个字节, 编译器用于区分不同对象并使其占用不同的内存空间当类有非静态成员变量时, 类对象所占的内存为非静态成员变量所占内存之和, 说明类非静态成员变量存储在类对象所占用的内存空间上静态成员变量存储位置和存储在类对象所占用的内存无关有成员函数的类的类对象所占的空间与无成员函数的类对象的所占空间一样, 说明类成员函数...

C++函数模板【代码】

#include<iostream> using namespace std;template <class T> void printArray(const T *array, int count) {for (int i=0; i< count; i++) {cout << array[i] << " ";}cout << endl; }int main() {const int A_COUNT = 5, B_COUNT = 6, C_COUNT = 7;int a[A_COUNT] = {1, 2, 3, 4, 5};double b[B_COUNT] = {1.1, 2.2, 3.3, 4.4, 5.5 ,6.6};char c[C_COUNT] = "abcdef";printArray(a, A_COUNT);printArray(b, B_COUNT);printArray(...

C++重载函数的注意事项【代码】

#include<iostream>using namespace std; /*** 函数重载注意事项* 1,函数重载和引用参数* 变量引用和常量引用被编译器视为不同的类型, 对于两个函数名相同的函数的某个参数, 一个是变量引用类型, 一个是常量引用类型, 可以重载* 此时调用时, 给该参数传入变量即调用使用变量引用的参数的函数, 传入常量则调用使用常量引用的参数的函数* 2,函数重载和默认参数* 最好不要在重载函数中使用默认参数, 很容易导致语句的二义性, 导致程序...

C++中字符串与字符串函数的使用

引用字符串或者使用字符串函数注意,在C++中,#include<string>与#include<ctring>和#include<string.h>是不一样的。使用C中的字符串函数比如strlen(),需要引入的是#include<ctring>或者#include<string.h>使用字符串变量比如string str = "abc",需要引入的是#include<string>

【C/C++】【类和对象】多态和虚函数【代码】

基类指针/派生类指针 #include <iostream>using namespace std;class Human { public:Human();Human(int);public:int m_Age;char m_Name[100];public:void func_human(); };Human::Human() {cout << "Human::Human()" << endl; }Human::Human(int tmp) {cout << "Human::Human(int tmp)" << endl; }void Human::func_human() {cout << "void Human::func_human()" << endl; }//Men是Human的子类 class Men:public Human { public:M...

C++之类的构造函数初始化列表【代码】

下面给出代码,体会一下构造函数有无初始化列表的区别#include<iostream> using namespace std;class Student{ private:char* m_name;int m_age;float m_score; public:Student(char* name,int age,float score);void show(); }/*不使用初始化列表,需要在函数体内完成赋值 Student::Student(char *name, int age, float score){m_name = name;m_age = age;m_score = score; }*///使用初始化列表,在函数体内无需操作 Student::Stu...

C++ 复制构造函数

——复制构造函数用于将一个对象的值复制到新创建的对象中,用于初始化过程中(包括按值传递参数),而不是常规的赋值过程中 原型:Class_name(const Class_name &)何时调用:新建一个对象并将其初始化为同类现有对象时,复制构造函数都将被调用 StringBad ditto(motto); // calls StringBad(const StringBad &) StringBad metoo = motto; // calls StringBad(const StringBad &) StringBad also = StringBad(motto); // ...

C++ - 函数的分文件编写【代码】

思路: 创建.h的头文件和.cpp的源文件(不是主函数所在cpp)头文件中写函数声明源文件中写函数定义 注意: 这三个代码再codeblocks上不能用,编译器G++的问题? devc++ 难道也是?? 先越过这个,等下次换了Qt再来验证, 反正, vs和Linux是可以的。 主函数:#include<iostream> #include "swapp.h" using namespace std;int main() {int x=1,y=2;swapp(x,y);return 0; } swapp.h:#include<iostream> using namespace std;void...

C++ 友元函数【代码】

类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。 友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。 如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend,如下所示: #include <iostream>using namesp...

c++基础知识杂记(Day7类继承与虚函数)【代码】

1.派生一个类 ```cpp class TableTennisPlayer { private:string firstname;string lastname;bool hasTable; public:TableTennisPlayer(const string& fn = "none",const string &ln = "none",bool ht = false);void name() const;bool HasTable() const { return hasTable; }void ResetTable(bool v) { hasTable = v; } }; class RatedPlayer :public TableTennisPlayer { private:unsigned int rating; public:RatedPlayer(unsi...

C++ 返回指向函数的指针,简单易学【代码】

#include <iostream> #include <string> using namespace std; //虽然不能返回一个函数,但是可以返回一个指向函数类型的指针; using PF = int(*)(int); //PF 指向返回值为int型,形参为int类型的函数,PF函数指针int RAW(int a) {if (a > 20){return 100;}else{return 200;} }int RWA(int b) {if (b > 30){return 300;}else{return 800;} } PF Ptest(int q) //返回函数指针 {PF now;if(q > 10){now = RAW; //函数指针指向RAW函数retu...