类模版的注意事项

demo 1

#include <iostream>
#include <cstdio>
using namespace std;

// 模板类
template <typename T>
class A
{
public:
	A(T a = 0) {
		this->a = a;
	}

	void printA()
	{
		cout << "a: " << a << endl;
	}
private:
	T a;
};

// 从模板类

// C++编译器要求具体的类,所以要写成A<int> &a,千万别忘了<int>
void useA(A<int> &a)
{
	a.printA();
}

int main()
{
	// 模板类(本身就是类型化的)=>具体的类=>定义具体的变量
	A<int> a1(11), a2(20), a3(30); // 模版是抽象的 => 需要给出具体类型
	//a1.printA();

	return 0;
}

demo 2

#include <iostream>
#include <cstdio>
using namespace std;

// 模板类
template <typename T>
class A
{
public:
	A(T a = 0) {
		this->a = a;
	}

	void printA()
	{
		cout << "a: " << a << endl;
	}
protected:
	T a;
};

// 从模板类派生的普通类
// 模板类派生时,需要具体化模板类,C++编译器需要知道,父类的数据类型是什么样子的
// 要知道父类所占的内存大小是多少,只有数据类型固定下来,才知道如何分配内存
class B : public A<int>
{
public:
	B(int a = 10, int b = 20) : A<int>(a)
	{
		this->b = b;
	}

	void printB()
	{
		cout << "a: " << a << "\nb: " << b << endl;
	}

private:
	int b;
};

// 从模板类派生模板类
template <typename T>
class C : public A < T >
{
public:
	C(T c, T a) : A<T>(a)
	{
		this->c = c;
	}
	void printC()
	{
		cout << "a: " << a << "\nc: " << c << endl;
	}
private:
	T c;
};

int main()
{
	C<int> c1(10, 20);
	c1.printC();
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-24 15:44:43

类模版的注意事项的相关文章

C++ 类模板三(类模版中的static关键字)

//类模版中的static关键字 #include<iostream> using namespace std; /* 类模板本质上是c++编译器根据类型参数创建了不同的类, c++编译器在利用类模板生成类的时候会为每个类生成一个static变量 那么对于类中的static关键字就非常好理解了 static关键字修饰的变量是属于类的 同一个类的对象共享类的static静态变量 类模板中的static修饰的变量数据类型必须是确定的 不可以是类型参数 因为静态变量在类对象之前初始化 这时候还没有通

C++ 类模板二(类模版与友元函数)

//类模版与友元函数 #include<iostream> using namespace std; template<typename T> class Complex{ public: Complex(T a,T b); void Print() const//const修饰的是this指针 { cout << this->Real << ":" <<this->Image<< endl; } /*

浅析在类模版中构建成员函数时,使用memcpy产生的副作用

一般情况下我们在对类模版中的成员函数进行构建时会经常对一些数据进行复制拷贝,而通常情况下我们都不提倡用memcpy进行拷贝,因为在类模版中所传进来的类型可以是内置类型也可以是非内置类型,除非你在成员函数中使用memcpy前进行类型萃取,否则它所带来的副作用的后果也是很可怕的.memcpy在对内置类型可正常拷贝,而在对非内置类型拷贝时会出现浅拷贝的现象. 下面我们可以通过一个简单的顺序表程序来分析memcpy对非内置类型所产生的副作用: #include<iostream> #include&l

【转载】C++ 与“类”有关的注意事项总结(十二):按成员初始化 与 按成员赋值

原文:C++ 与"类"有关的注意事项总结(十二):按成员初始化 与 按成员赋值 一.按成员初始化(与构造函数和拷贝构造函数有关) 用一个类对象初始化另一个类对象,比如: Account oldAcct( "Anna Livia Plurabelle" ); Account newAcct( oldAcct ); 被称为缺省的按成员初始化(default memberwise initialization),缺省是因为它自动发生,无论我们是否提供显式构造函数,按成员是

初探C++类模版学习笔记

类模板 实现:在定义类的时候给它一个或多个参数,这个些参数表示不同的数据类型.                              -->抽象的类. 在调用类模板时, 指定参数, 由编译系统根据参数提供的数据类型自动产生相应的模板类                   -->具体的类. 类模板的定义 C++的类模板的写法如下: template <类型参数表> //类型参数表的写法就是:class 类型参数1, class 类型参数2, - class 类模板名 { 成员函数

JDBC之——一个单线程JDBC基类和一些注意事项

下面的一个DBase基类提供了一些jdbc的基本操作,配置文件的配置部分并不准确,只是在自己机器上的mysql中测试过.. 数据库的增删改方法中都在开始调用了getConnection方法,末尾调用了Close方法:数据库的查询中没有调用close方法,因为一旦调用了close方法,就无法用RecodeSet操作查询结果了,所以在调用了查询方法后,要调用close方法,防止出现 too many connections 错误. 此外,DBase中的所有对象都是static的,所以在使用时不要调用

spring jdbc查询 依赖JdbcTemplate这个类模版封装JDBC的操作

1 package cn.itcast.spring.jdbc; 2 3 import java.util.List; 4 5 import org.springframework.jdbc.core.support.JdbcDaoSupport; 6 7 public class PersonDao extends JdbcDaoSupport{ 8 public void update(){ 9 this.getJdbcTemplate().execute("update person se

c++ 类模版、成员函数模版、函数模版 用法

C++函数模版与类模版. template <class T> void SwapFunction(T &first, T &second){ }//函数模版 template <class T>//类模版 class CTemplate{ public: void SWap(T &first, T &second){ } }; #include <iostream> class Single{ public: static Single

类模版静态成员初始化

首先看代码,静态数据成员分为两种情况,第一种不依赖模版类型参数,第二种依赖模版类型参数. template <typename T> class TestTemStatic { public: static int knownTypeVar; static T unKnownTypeVar; }; 那么如何初始化呢? 对于第一种存在两种初始化方式: template <> int TestTemStatic<int/* any other type */>::known