前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >几个 C++ 类模板的类内外声明实现实例

几个 C++ 类模板的类内外声明实现实例

作者头像
耕耘实录
发布2022-05-09 16:16:24
8270
发布2022-05-09 16:16:24
举报
文章被收录于专栏:耕耘实录

类模板中,类内声明,类外实现:

代码语言:javascript
复制
#include<iostream>
#include<string>

using namespace std;

template<class T1, class T2>
class Demo {
public:
    Demo(T1 v, T2 a);

    void show();

private:
    T1 var;
    T2 arg;
};

template<class T1, class T2>
Demo<T1, T2>::Demo(T1 v, T2 a) {
    this->var = v;
    this->arg = a;
}

template<class T1, class T2>
void Demo<T1, T2>::show() { // 即使未用到,也需要声明模板的参数列表。
    cout << "Var:" << this->var << "\nArg:" << this->arg << endl;
}

int main() {
    Demo<string, int> d("demo", 21);
    d.show();
}

全局函数做友元函数,且在类内实现:

代码语言:javascript
复制
#include<iostream>
#include<string>

using namespace std;

template<class T1, class T2>
class Demo {
    friend void show(Demo<T1, T2> d) {
        cout << "Var:" << d.var << "\nArg:" << d.arg << endl;
    }

public:
    Demo(T1 v, T2 a) {
        this->var = v;
        this->arg = a;
    };
private:
    T1 var;
    T2 arg;
};

int main() {
    Demo<string, int> d("demo", 21);
    show(d);
}

全局函数做友元,且在类外实现:

代码语言:javascript
复制
#include<iostream>
#include<string>

using namespace std;

template<class T1, class T2>
class Demo; // 需提前声明相关的类

template<class T1, class T2>
void show(Demo<T1, T2> d) {
    cout << "Var:" << d.var << "\nArg:" << d.arg << endl;
}

template<class T1, class T2>
class Demo {
    friend void show<>(Demo<T1, T2> d);

public:
    Demo(T1 v, T2 a) {
        this->var = v;
        this->arg = a;
    }

private:
    T1 var;
    T2 arg;
};

int main() {
    Demo<string, int> d("demo", 21);
    show(d);
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档